spring boot 中使用动态定时任务

在实际开发过程中,可能需要定时任务在夜间对系统进行维护,但是如果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 }
动态定时任务实现

猜你喜欢

转载自www.cnblogs.com/rolayblog/p/11275823.html
今日推荐