一、依赖的jar包
? ? quartz-2.2.1.jar
? ? quartz-jobs-2.2.1.jar
? ? c3p0-0.9.1.jar (通过数据库存储定时任务时,需要用到)
? ? slf4j-api-1.7.2.jar (日志相关)
? ? maven配置
?
<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.1</version> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz-jobs</artifactId> <version>2.2.1</version> </dependency>
二、XML配置
?
? ?新建文件spring-context-quartz.xml,并把文件加入到spring配置文件中:
<import resource="spring-context-quartz.xml"/>
? ??spring-context-quartz.xml主要由三部分组成:
? ? JobDetail:这里使用了MethodInvokingJobDetailFactoryBean,不再需要实现Job接口,普通的JavaBean
? ??Trigger:这里使用了CronTrigger,通过时间表达式来执行任务,非常灵活,这里就不再多介绍了
? ??Scheduler:调度器,按Trigger配置时间点来执行JobDetail配置的方法
?
<!-- 省略头部schema部分 --> <!-- job的配置开始 --> <bean id="jobDetail1" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <ref bean="myJob" /> </property> <property name="targetMethod"> <value>checkJob1</value> </property> </bean> <bean id="jobDetail2" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <ref bean="myJob" /> </property> <property name="targetMethod"> <value>checkJob2</value> </property> </bean> <!-- job的配置结束 --> <!-- 启动触发器的配置开始 --> <bean id="jobTrigger1" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="jobDetail"> <ref bean="jobDetail1" /> </property> <property name="cronExpression"> <!-- 每天凌晨2点触发 --> <value>0 0 2 * * ?</value> </property> </bean> <bean id="jobTrigger2" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="jobDetail"> <ref bean="jobDetail2" /> </property> <property name="cronExpression"> <!-- 每隔1小时执行一次 --> <value>0 0 0/1 * * ?</value> </property> </bean> <!-- 启动触发器的配置结束--> <!-- 调度的配置开始 --> <bean autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="jobTrigger1" /> <ref bean="jobTrigger2"/> </list> </property> </bean> <!-- 调度的配置结束 -->?
三、Java类
? ? 第二步中使用了MethodInvokingJobDetailFactoryBean来配置JobDetail,所以Java类不需要再实现Job接口的execute方法,普通的Java bean即可:
?
@Component("myJob") public class MyJob { public void checkJob1(){ //TODO } public void checkJob2(){ //TODO } }
? ? 附上quartz-2.2.1相关的jar包下载,或者从quartz官网下载其他版本
? ? http://www.quartz-scheduler.org/downloads
?
? ? 下一篇将介绍quartz2最简单的使用
?
?
原文:http://electricwave.iteye.com/blog/2250151