第一种 Java Timer定时
spring配置文件:
<bean id= "reportTimerTask" class ="com.flex.thread.TaskJob"></ bean>(或者在TaskJob类中添加注释:)
<bean id= "scheduleReportTask" class="org.springframework.scheduling.timer.ScheduledTimerTask" >
<property name="timerTask" ref="reportTimerTask" />
<!-- 设置启动延迟 -->
<property name="delay" >
<value> 10000</value >
</property>
<!-- 后续延迟 -->
<property name="period" >
<value> 6000</value >
</property>
</bean>
<bean class="org.springframework.scheduling.timer.TimerFactoryBean" >
<property name="scheduledTimerTasks" >
<list>< ref bean ="scheduleReportTask"/></ list>
</property>
</bean>
class类
package com.flex.thread;
import java.util.TimerTask;
public class TaskJob extends TimerTask {
@Override
public void run() {
...
}
}
第二种 Quartz定时器
Quartz是一个强大的企业级任务调度框架,Spring中继承并简化了Quartz,下面就看看在Spring中怎样配置Quartz:
首先我们来写一个被调度的类:
package com.web.quartz;
public class TaskReportJob {
protected void work() {
System. out.println("------定时器运行中------" );
}
}
Spring的配置文件:
<beans>
<!-- 要调用的工作类 -->
<bean id= "quartzJob" class ="com.web.quartz.TaskReportJob" ></bean>
<!-- 定义调用对象和调用对象的方法 -- >
<bean id= "jobtask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" >
<!-- 调用的类 -->
<property name = "targetObject" >
<ref bean ="quartzJob" />
</property>
<!-- 调用类中的方法 -- >
<property name = "targetMethod" >
<value>work</value >
</property>
</bean>
<!-- 定义触发时间 -- >
<bean id= "doTime" class ="org.springframework.scheduling.quartz.CronTriggerBean" >
<property name = "jobDetail" >
<ref bean ="jobtask" />
</property>
<!-- cron 表达式 -- >
<property name = "cronExpression" >
<value> 10,15,20,25,30,35,40,45,50,55 * * * * ? </value >
</property>
</bean>
<!-- 总管理类 如果将lazy- init= 'false' 那么容器启动就会执行调度程序 -- >
<bean id= "startQuertz" lazy-init = "false" autowire = "no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" >
<property name = "triggers" >
<list>
<ref bean ="doTime" />
</list>
</property>
</bean>
</beans>
表达式意义
"0 0 12 * * ?" 每天中午12点触发
"0 15 10 ? * *" 每天上午10:15触发
"0 15 10 * * ?" 每天上午10:15触发
"0 15 10 * * ? *" 每天上午10:15触发
"0 15 10 * * ? 2005" 2005年的每天上午10:15触发
"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发
"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发
"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发
"0 15 10 15 * ?" 每月15日上午10:15触发
"0 15 10 L * ?" 每月最后一日的上午10:15触发
"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发