一、依赖的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