静态定时任务
package com.lsbj.biz;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
/**
* @Auther: zs
* @Date: 2019/1/9 11:34
* @Description:
*/
@Component
@Configuration
@EnableScheduling
public class ScheduTask {
/**
* 凌晨一点统计昨天的
*/
@Scheduled(cron = "0/5 * * * * ?")
public void statisticTask(){
System.out.println("静态定时任务:"+System.currentTimeMillis()/1000);
}
}
EnableScheduling注解:开启定时任务;Configuration注解:配置注解(不用也行);Component注解:实体注解,交由spring容器管理
效果:
五秒一次
动态定时任务
package com.lsbj.biz;
import javafx.scene.Parent;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.Trigger;
import org.springframework.scheduling.TriggerContext;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.regex.Pattern;
/**
* @Auther: zs
* @Date: 2019/1/16 16:19
* @Description:
*/
@Component
@EnableScheduling
public class DynamicScheduTask implements SchedulingConfigurer{
//默认五秒执行一次
private static final String DEFAULT_CRON = "0/5 * * * * ?";
//查询数据库接口,获得最新cron
@Mapper
public interface CronMapper {
@Select("select mender from setting_office where id = '23'")
String getCron();
}
//注入cron接口
@Autowired
CronMapper cronMapper;
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
System.out.println("===========1=============");
scheduledTaskRegistrar.addTriggerTask(task(),trigger());
}
private Runnable task(){
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("动态定时任务:"+System.currentTimeMillis()/1000);
}
};
return runnable;
}
private Trigger trigger(){
return new Trigger() {
//下一次触发事件
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
System.out.println("===========2=============");
Date date = null;
try{
//cron表达式异常时,进入catch执行默认cron表达式
CronTrigger cronTrigger = new CronTrigger(getCron());
date = cronTrigger.nextExecutionTime(triggerContext);
}catch (Exception e){
System.out.println("===========4====cron异常(取默认值)");
CronTrigger cronTrigger = new CronTrigger(DEFAULT_CRON);
date = cronTrigger.nextExecutionTime(triggerContext);
}
return date;
}
};
}
private String getCron(){
//可以通过数据库,redis或其他方式获取cron表达式
//从数据库获取
String cron = cronMapper.getCron();
System.out.println("cron:"+cron);
return cron;
}
}
异常cron
数据库cron:aaa* * * * ?
结果:
异常时取默认值5秒执行一次;
正常cron时
数据库cron:0/6 * * * * ?(6秒一次,默认五秒)
结果: