SpringBoot之任务调度
开启任务调度
@SpringBootApplication
// 开启任务调度
@EnableScheduling
public class TaskDemoApplication {
public static void main(String[] args) {
SpringApplication.run(TaskDemoApplication.class, args);
}
}
创建调度任务
@Component
@Slf4j
public class MyTask {
/**
* 秒 分 时 日 月 周
*/
@Scheduled(cron = "1 * * * * ?")
public void doTask1(){
// 实际上就是每分钟一次
log.info(Thread.currentThread().getName() + " doTask1 : 每分钟的第1秒执行一次");
}
@Scheduled(cron = "1/1 * * * * ?")
public void doTask2(){
// 分子的1表示从第1秒开始执行,分母表示每隔1秒执行一次。
// 但分子我们常常写为*,比如每10秒执行一次*/10
// 如果需要每隔5秒执行一次,就是除以5
log.info(Thread.currentThread().getName() + " doTask2 : 每秒执行一次");
}
// @Scheduled(fixedDelay = 5000)
// 时间默认单位是毫秒,我们可以通过timeUnit属性修改
@Scheduled(fixedDelay = 5,timeUnit = TimeUnit.SECONDS)
public void doTask3() throws InterruptedException {
Thread.sleep(10000);// 休眠10秒来验证(意味着至少要等15秒之后才会再次执行)
// 上次调用结束后5秒执行
log.info(Thread.currentThread().getName() + " doTask3 : 上次调用结束后5秒执行");
}
@Scheduled(fixedRate = 5,timeUnit = TimeUnit.SECONDS)
public void doTask4() throws InterruptedException {
// 每隔5秒执行,无论上次执行是否成功,是否结束
log.info(Thread.currentThread().getName() + " doTask4 : 每隔5秒执行");
//Thread.sleep(10000);
}
}
配置 yml
spring:
task:
scheduling:
# 调度线程的前缀
thread-name-prefix: task_
pool:
# 线程池大小,默认为 1
size: 10
shutdown:
# 线程池关闭时等待所有任务完成
await-termination: true
# 最大等待时长,确保最后一定关闭
await-termination-period: 10s
标签:Scheduled,任务调度,SpringBoot,Thread,void,执行,public
From: https://www.cnblogs.com/his365/p/17262315.html