Spring Boot 中启用定时任务的操作方法
作者:种树人20240819
文章主要介绍了如何在Spring Boot中启用定时任务,包括使用@EnableScheduling注解、配置项控制定时任务是否开启以及如何关闭cron定时任务,感兴趣的朋友跟随小编一起看看吧
添加 @EnableScheduling 注解
可以添加在 Application 类上
@SpringBootApplication @EnableScheduling public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
定义定时任务类和方法
定时任务类要注册为Spring IoC 容器的 Bean,或者通过 @Bean 将某个方法的返回值(返回值为定时任务类对象)注册为 Spring IoC 的Bean。
package com.cmcc.nlpt.sitemessage.task; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Component public class ScheduledTask { /** * 每日0点执行 */ @Scheduled (cron = "0 0 0 * * ?") public void doCronTask() { } /** * 本次任务结束到下次任务开始的时间间隔为5秒 */ @Scheduled (fixedDelay = 5000) public void doFixedDelayTask() { } /** * 两次任务开始时间间间隔为5秒 */ @Scheduled(fixedRate = 5000) public void doFixedRateTask() { } /** * 第一次任务启动延时1秒,后续任务结束到下次任务开始的时间间隔为5秒 */ @Scheduled(initialDelay = 1000, fixedDelay = 5000) public void doInitialDelayTask() { } }
通过配置项控制定时任务是否开启
方法一 @ConditionalOnProperty
此方法是控制任务类是否注册为 Spring IoC 的 Bean,可以控制上述所有类型的定时任务是否注册。
# enabled 配置为 false 时定时任务就不会开启 scheduled-task: enabled: true
@Component @ConditionalOnProperty(name = "scheduled-task.enabled", havingValue = "true") public class ScheduledTask { /** * 每日0点执行 */ @Scheduled (cron = "0 0 0 * * ?") public void doCronTask() { } /** * 本次任务结束到下次任务开始的时间间隔为5秒 */ @Scheduled (fixedDelay = 5000) public void doFixedDelayTask() { } /** * 两次任务开始时间间间隔为5秒 */ @Scheduled(fixedRate = 5000) public void doFixedRateTask() { } /** * 第一次任务启动延时1秒,后续任务结束到下次任务开始的时间间隔为5秒 */ @Scheduled(initialDelay = 1000, fixedDelay = 5000) public void doInitialDelayTask() { } }
方法二 Boolean 标志位
使用此方法定时任务还是会被调度执行,只是在任务执行时什么都不做,也可以控制上述所有类型的定时任务。
scheduled-task: enabled: true
@Component @ConditionalOnProperty(name = "scheduled-task.enabled", havingValue = "true") public class ScheduledTask { @Value("${scheduled-task.enabled}") private Boolean taskEnabled; @Scheduled (fixedDelay = 5000) public void doFixedDelayTask() { if (!taskEnabled) { return; } System.out.println("start to doFixedDelayTask"); } }
使用"-"使 cron 定时任务关闭
此方法只适用于 cron 类型的定时任务,不适用于其它类型的定时任务。
注意:yml 文件中配置 - 时要加上双引号或单引号,否则会报错。
关闭 cron 定时任务的配置:
scheduled-task: cron: "-"
开始 cron 定时任务的配置,将 cron 表达式配置上即可:
scheduled-task: cron: 0 0 0 * * ?
@Component public class ScheduledTask { /** * 每日0点执行 */ @Scheduled (cron = "${scheduled-task.cron}") public void doCronTask() { } }
参考资料
- Michael Pratt:Conditionally Enable Scheduled Jobs in Spring
- tan日拱一兵:@ConditionalOn…注解,条件组合你知道吗?
- 江南一点雨:Spring Boot 中实现定时任务的两种方式!
到此这篇关于如何在 Spring Boot 中启用定时任务的文章就介绍到这了,更多相关Spring Boot启用定时任务内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!