利用spring整合quartz实现一个定时任务,实现基本有两种方法:
1.配置MethodInvokingJobDetailFactoryBean来实现不需要集成和实现的job类(我采用这种方式)
2.继承QuartzJobBean或者实现Job接口,需要重写SchedulerFactoryBean类(我暂不提供,请自行百度)。
配置MethodInvokingJobDetailFactoryBean来实现不需要集成和实现的job类,下面是详细操作:
1. 如没有,请添加如下两包:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.2</version>
</dependency>
2.自行编写job类,跟普通的Java类相同,无需继承和实现接口
public class RightsReminderJob {
public void rightsRemind(){
try {
//定时任务自己的业务逻辑
} catch (Exception e) {
log.error("定时任务执行出错...";
}
}
}
3.applicationContext.xml中进行,如下配置:
<!-- 定时任务 -->
<bean id="myScheduler"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="rightsReminderTrigger"></ref>
</list>
</property>
<property name="autoStartup" value="true"></property>
<property name="jobFactory" ref="customJobFactory"></property>
</bean>
<bean id="rightsReminderTrigger"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="rightsReminderJobDetail">
</property>
<property name="cronExpression">
<value>0 20 10 * * ?</value>
</property>
</bean>
<bean id="rightsReminderJobDetail"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="rightsReminderJob">
</property>
<property name="targetMethod" value="rightsRemind"></property>
<property name="concurrent" value="false" />
</bean>
<bean id="rightsReminderJob" class="com.enjoysign.common.quartz.RightsReminderJob" />
其中上面红色部分是对任务调度进行时间设置,分别对应 [秒] [分] [小时] [日] [月] [周] [年]
上面代表的意思是:每天十点二十分触发
详细的解释请参考foamflower 的关于这块的博客,写的很好: http://blog.csdn.net/foamflower/article/details/4260645