在实际开发过程中,可能需要定时任务在夜间对系统进行维护,但是如果cro表达式需要变更,通常我们都是写在方法上面,无法动态更改,如果需要修改则要修改源码重新打包发布。
1、新建一个空白的spring boot项目
2、在启动类上添加@EnableScheduling注解,启用定时任务。
3、新建定时任务类
1 @Component 2 public class TestTask implements SchedulingConfigurer { 3 4 private static final String DEFAULT_CRON = "* * * * * ?"; 5 private String cron = DEFAULT_CRON; 6 7 8 @Override 9 public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { 10 Runnable task = new Runnable() { 11 @Override 12 public void run() { 13 //定时任务执行内容 14 System.out.println("hi! this dynamic task"); 15 } 16 }; 17 Trigger trigger = new Trigger() { 18 @Override 19 public Date nextExecutionTime(TriggerContext triggerContext) { 20 // 定时任务触发,可修改定时任务的执行周期 21 //模拟获取定时任务表达式配置 22 String thecron=""; 23 try { 24 RestTemplate restTemplate=new RestTemplate(); 25 thecron=restTemplate.getForObject("http://localhost:8089/config/getconfig",String.class); 26 27 }catch (Exception ex) 28 { 29 30 } 31 if (StringUtils.isEmpty(thecron)) { 32 cron = DEFAULT_CRON; 33 }else 34 { 35 setCron(thecron); 36 } 37 CronTrigger trigger = new CronTrigger(cron); 38 Date nextExecDate = trigger.nextExecutionTime(triggerContext); 39 return nextExecDate; 40 } 41 }; 42 taskRegistrar.addTriggerTask(task, trigger); 43 } 44 45 public void setCron(String cron) { 46 this.cron = cron; 47 } 48 }