一、概念
Quartz是OpenSymphony开源组织在 job scheduling领域又一个开源项目
它可以与JavaSE、JavaEE应用程序相结合,也可以单独使用
Quartz是开源且具有丰富特性的任务调度库,能够集成任何Java应用
任务job:
job就是你想要实现的任务类,每一个job必须实现org.quartz.job接口,且只需实现接口定义的execute()方法
触发器Trigger:
Trigger是执行任务的触发器,比如你想每天定时7点闹钟,Trigger将会设置7点执行该任务。
Trigger主要包含两种:SimpleTrigger和CronTrigger
调度器Scheduler:
将任务和触发器整合起来,负责基于Trigger设定的时间来执行job
二、常用API
- Scheduler:用于与调度程序交互的主程序接口
- Job:任务类
- JobDetail:是通过JobBuilder类创建的Job实例
- JobDataMap:在Job实例执行的时候,可以使用的数据集合
- Trigger:任务的触发器
- JobBuilder:任务创建器
- Trigger:触发器创建器
- JobListener、TriggerListener、SchedulerListener:监听器
三、入门案例
基于spring和quartz整合
第一步:创建maven工程,导入spring和quartz相关依赖
<!--引入Quartz的依赖-->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.3</version>
</dependency>
<dependency>
<groupId>ort.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.2.3</version>
</dependency>
第二步:创建任务类
public class MyJob {
public void run() {
System.out.println("任务执行了---------" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
}
}
第三步:在spring配置文件中配置任务类
<bean id="myJob" class="com.orchid.quartz.MyJob"></bean>
第四步:在spring配置文件中配置任务类实例
<!--配置jobDetail-->
<bean id="myJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!--用到的job实例-->
<property name="targetObject" ref="myJob"/>
<!--job实例中的方法-->
<property name="targetMethod" value="run"/>
</bean>
第五步:在spring配置文件中配置触发器
<!--配置触发器Trigger-->
<bean id="myTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="myJobDetail"/>
<property name="cronExpression">
<!--每5秒执行一次-->
<value>0/5 * * * * ?</value>
</property>
</bean>
第六步:在spring配置文件中配置调度器
<!--配置scheduler工厂-->
<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="myTrigger"/>
</list>
</property>
</bean>
第七步:加载spring配置文件,创建spring工厂
public class Test {
public static void main(String[] args) {
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
}
}
四、cron表达式
0 0 12 * * ?
秒域:0,分域:0,时域:12,天月周无限制,年域:无
在今年的每天12点运行
0 15 10 ? * *
秒域:0,分域:15,时域:10,天月周无限制,年域:无
在今年的每天10:15运行
0 15 10 * * ? 2008
秒域:0,分域:15,时域:10,天月周无限制,年域:2008
在2008年的每天10:15运行
0 * 14 * * ?
秒域:0,分域:无限制,时域:14,天月周无限制,年域:无
在今年的每天14点到15点之间每分钟运行一次,开始于14:00,结束于14:59。
不包括15点,因为15点的时域是15,不是14
0 0/5 14 * * ?
秒域:0,分域:递增步数5,时域:14,天月周无限制,年域:无
在今年的每天14点到15点每5分钟运行一次,开始于14:00,结束于14:55。
0 0/5 14,18 * * ?
秒域:0,分域:递增步数5,时域:14和18,天月周无限制,年域:无
在今年的每天14点到15点每5分钟运行一次及18点到19点每5钟也运行一次。
0 0-5 14 * * ?
秒域:0,分域:0到5内(0.1.2.3.4.5),时域:14,天月周无限制,年域:无
在今年的每天14:00点到14:05,每分钟运行一次。
0 10-44 14 ? 3 WED
秒域:0,分域:10到44内,时域:14,天域:无限制,月域:3,周域:WED,年域:无
在今年的3月每周三的14:10到14:44,每分钟运行一次。
0 15 10 ? * MON-FRI
秒域:0,分域:15,时域:10,天月无限制,周域:W,年域:无
在今年的每周平日的10:15分运行。
0 15 10 15 * ?
秒域:0,分域:15,时域:10,天域:15,月周无限制,年域:无
在今年的每月15日10:15分运行。
0 15 10 L * ?
秒域:0,分域:15,时域:10,天域:L,月周无限制,年域:无
在今年的每月最后一天10:15分运行。
0 15 10 ? * 6#3
秒域:0,分域:15,时域:10,天月无限制,周域:6#3,年域:无
每月第三个星期五的10:15分运行。