一、前言:微服务应用中可能会涉及到多个定时任务跨服务同时执行,这里就会涉及到线程生命周期和一致性问题,任务调度器本质上还是单独启动的线程执行,但是生命周期不会随应用的停止而销毁,所以本篇内容只涉及当前应用执行定时任务
1、配置启动类
2、cron表达式:(cron = "0 0 0 * * ?")
一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素
秒 |
0-59 |
, - * / |
||
分 |
0-59 |
, - * / |
||
小时 |
0-23 |
, - * / |
||
日期 |
1-31 |
, - * ? / L W C |
||
月份 |
1-12 或者 JAN-DEC |
, - * / |
||
星期 |
1-7 或者 SUN-SAT |
, - * ? / L C # |
||
年(可选) |
留空, 1970-2099 |
, - * / |
3、默认情况下容器创建的时候会创建单线程池执行任务调度、这样对于我们的多任务调度可能会是致命的,当多个任务并发(或需要在同一时间)执行时,任务调度器就会出现时间漂移,任务执行时间将不确定
自定义线程池的方式
@Configuration
public
class
ScheduleConfig
implements
SchedulingConfigurer {
public
void
configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.setScheduler(taskExecutor());
}
@Bean
(destroyMethod=
"shutdown"
)
public
Executor taskExecutor() {
return
Executors.newScheduledThreadPool(
20
);
}
}