首页 > 其他分享 >SpringBoot之任务调度

SpringBoot之任务调度

时间:2023-03-27 17:51:34浏览次数:34  
标签:Scheduled 任务调度 SpringBoot Thread void 执行 public

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

相关文章