本文主要介绍通过Quartz和task实现Spring定时任务
一、通过Quartz实现spring定时任务
引入spring相关包之后,还需引入quartz-all-1.8.6.jar slf4j-api-1.7.5.jar
1.写实现定时任务的类
package com.you.springmvc.controller;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
public class SpringQuartzJob extends QuartzJobBean{
//确保只有定时任务执行完后才能再次执行
private static int flag=0;
@Override
protected void executeInternal(JobExecutionContext arg0)
throws JobExecutionException {
if(flag==0){
System.out.println("===quartz定时任务开始===");
try{
flag=1;
System.out.println("==quartz定时任务执行中===");
}catch(Exception e){
}finally{
flag=0;
System.out.println("===quartz定时任务结束===");
}
}
}
}
2.在Spring配置文件中加入配置
<!-- quartz管理工厂类 -->
<bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="springQuartzJobBeanTrigger"/>
</list>
</property>
</bean>
<!-- 触发器 -->
<bean id="springQuartzJobBeanTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="springQuartzJobBean" />
<!-- 每20秒执行一次 -->
<property name="cronExpression" value="0/20 * * * * ?" />
</bean>
<!-- 定时任务详情 -->
<bean id="springQuartzJobBean" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="com.you.springmvc.controller.SpringQuartzJob" /> <!-- 写定时任务的类 -->
</bean>
二、通过task实现定时任务
1.写实现定时任务的类
package com.you.springmvc.controller;
public class SpringScheduleJob {
private static int flag=0;
public void scheduleJobTest(){
if(flag==0){
System.out.println("=====进入定时任务======");
flag=1;
try{
System.out.println("=====执行定时任务======");
}catch(Exception e){
}finally{
flag=0;
System.out.println("=====结束定时任务======");
}
}
}
}
2.在Spring配置文件中配置
<!-- ref指向写定时任务的类,method指向写定时任务的方法,cron配置定时任务执行时间-->
<task:scheduled-tasks>
<task:scheduled ref="scheduleJob" method="scheduleJobTest" cron=" 0/20 * * * * ? "/>
</task:scheduled-tasks>
<!--写定时任务的类-->
<bean id="scheduleJob" class="com.you.springmvc.controller.SpringScheduleJob"></bean>
三、从网上查找的定时任务执行时间的配置
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分每分触发
0 0/5 14 * * ? 每天下午的 2点到2点59分(整点开始,每隔5分触发)
0 0/5 14,18 * * ? 每天下午的 2点到2点59分、18点到18点59分(整点开始,每隔5分触发)
0 0-5 14 * * ? 每天下午的 2点到2点05分每分触发
0 10,44 14 ? 3 WED 3月分每周三下午的 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 每月的第三周的星期五开始触发
0 0 12 1/5 * ? 每月的第一个中午开始每隔5天触发一次
0 11 11 11 11 ? 每年的11月11号 11点11分触发