Quartz (作业)任务调度

141 阅读3分钟

Quartz可以用来做什么?

Quartz是一个任务调度框架。比如你遇到这样的问题

  • 想每月几号,银行卡还款
  • 想在每年纪念日的时候给女朋友发送一条祝福

这些问题总结起来就是:在某一个有规律的时间点干某件事。并且时间的触发的条件可以非常复杂(比如每月最后一个工作日的17:50),复杂到需要一个专门的框架来干这个事。 Quartz就是来干这样的事,你给它一个触发条件的定义,它负责到了时间点,触发相应的Job起来干活。

一个简单的Demo: maven

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.itqf.test</groupId>
  <artifactId>day02_Quartz</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <dependencies>
      <!-- spring的依赖 -->
      <!-- Spring -->
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-context</artifactId>
				<version>4.1.3.RELEASE</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-beans</artifactId>
				<version>4.1.3.RELEASE</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-webmvc</artifactId>
				<version>4.1.3.RELEASE</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-jdbc</artifactId>
				<version>4.1.3.RELEASE</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-aspects</artifactId>
				<version>4.1.3.RELEASE</version>
			</dependency>
            <dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-jms</artifactId>
				<version>4.1.3.RELEASE</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-context-support</artifactId>
				<version>4.1.3.RELEASE</version>
			</dependency>
      <!-- quartz的依赖 -->
      <dependency>
          <groupId>org.quartz-scheduler</groupId>
          <artifactId>quartz</artifactId>
          <version>2.2.1</version>
      </dependency>
  
  </dependencies>
  
  
  <build>
        <plugins>
			<!-- java编译插件 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.2</version>
				<configuration>
					<source>1.7</source>
					<target>1.7</target>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
		</plugins>
  </build>
  
</project>

java

package com.itqf.job;

import java.text.SimpleDateFormat;
import java.util.Date;

public class MyJob {
	
	public void run() {
		//输出当前时间
		System.out.println(new SimpleDateFormat("yyyy-MM-dd HH-mm:ss").format(new Date()));
	}
}

xml

	<!-- 创建作业对象 -->
	<bean id="myjob" class="com.itqf.job.MyJob"></bean>
                        
     <!-- 配置作业详情 -->
     <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
     		<property name="targetObject" ref="myjob"></property>
     		<property name="targetMethod" value="run"></property>
     </bean>
     
     <!-- 创建触发器 -->
     <bean id="trigger1" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
     		<!-- 配置作业详情对象 -->
     		<property name="jobDetail" ref="jobDetail"></property>
     		<!-- 配置触发条件  cron表达式-->
     		<property name="cronExpression" value="0/2 * * * * ?"></property>
     </bean>
     
     <!-- 调度器 调度器中可以有多个触发器 list中添加 -->
     <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
     	<property name="triggers">
     		<list>
     			<ref bean="trigger1"></ref>
     		</list>
     	</property>
     </bean>
package com.itqf.job;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class test {
	//测试 直接创建出xml中的调度对象
	public static void main(String[] args) {
		new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
	}
}

这个demo演示了Quartz的三个基本要素:

  • Scheduler:调度器。所有的调度都是由它控制.
  • Trigger:触发器,将制定的触发对象和条件绑定.
  • JobDetail:制定具体的作业对象的具体方法.