Spring的定时任务具有好几种写法,现在我在这里介绍其中的一种。
使用普通类,不需要继承基类。首先我们先写一个普通类,并定义其定时方法
package com.xx;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* QuartzTest
* @author lenovo
* @version 1.0
*
*/
public class QuartzTest {
//日志
private Logger log = LoggerFactory.getLogger(QuartzTest.class);
/**
* 定时方法
*/
public void quartzMethod(){
long start = System.currentTimeMillis();
System.out.println("=======一系列操作=======");
long end = System.currentTimeMillis();
long time = end - start;
log.debug("定时方法执行时间:" + time + "ms");
}
}
然后在spring中做如下配置。
(一)配置具体的bean
<!-定时任务bean-->
<bean id="taskJob" class="com.xx.QuartzTest"/>
<!--定时任务具体要执行的详细内容,执行类以及执行方法-->
<bean id="jobDetailXx" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!--false表示等上一个任务执行完后再开启新的任务-->
<property name="concurrent" value="false"/>
<property name="targetObject">
<ref bean="taskJob"/>
</property>
<property name="targetMethod">
<value>quartzMethod</value>
</property>
</bean>
<!-- 调度触发器 -->
<bean id="myTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail">
<ref bean="jobDetailXx" />
</property>
<!-- 10分钟执行一次 -->
<property name="cronExpression">
<value>0 0/10 * * * ?</value>
</property>
</bean>
(二)配置调度工厂
<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="myTrigger"/>
</list>
</property>
</bean>
如果想配置多个定时任务,将(一)进行重复操作,但是注意bean的id不要一致。并将 调度触发器配置到调度工厂的list标签中。
<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="oneTrigger"/>
<ref bean="twoTrigger"/>
<ref bean="threeTrigger"/>
...
</list>
</property>
</bean>
定时任务的时间具有两种形式,一种是定时几点进行执行,第二种是隔一段时间执行。
具体表达式的写法请参考http://blog.csdn.net/error_case/article/details/41940667