Spring Task fixedDelayString不能随着配置中心动态变化的问题
在SpringBoot项目中可以通过@Scheduled(fixedDelayString = "${time}")
读取配置中心内容创建一个定时任务,但当值变化时任务不会跟着创建,
要让值跟着变需要手动配置:
@Configuration
//开启定时任务
@EnableScheduling
//实现SchedulingConfigurer接口
public class SchedulingConfig implements SchedulingConfigurer {
//实现runable的定时任务对象
@Autowired private GetIncrementJob getIncrementJob;
private Long time;
//从配置中读取
@Value("${time}")
public void setTime(Long time) {
this.time = time;
}
//配置定时任务
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
//使用触发器做定时,实现nextExecutionTime方法,在任务结束时会调用这个方法获取下一次执行的时间。
//每次的值都是根据time重新计算的,在time变化后下一次执行时间也就变了。
Trigger trigger =
new Trigger() {
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
// 下一次执行时间
return new Date(System.currentTimeMillis() + time);
}
};
//添加任务
scheduledTaskRegistrar.addTriggerTask(getIncrementJob, trigger);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
上次更新: 10/23/2024