开发者

Spring Boot 中启用定时任务的操作方法

目录
  • 添加 @EnableScheduling 注解
  • 定义定时任务类和方法
  • 通过配置项控制定时任务是否开启
    • 方法一 @ConditionalOnProperty
    • 方法二 Boolean 标志位
    • 使用"-"使 cron 定时任务关闭
  • 参考资料

    添加 @EnableScheduling 注解

    可以添加在 Application 类上

    @SpringBootApplication
    @EnableScheduling
    public class Application {
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }

    定义定时任务类和方法

    定时任务类要注册为Sphppring 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() {
        }
    }

    通过配置项控制定时任务是否开启

    方法一 @ConditionalOjsnProperty

    此方法是控制任务类是否注册为 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 = "pythonscheduled-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 文件中配置 - 时要加上双引号或单引号,python否则会报错。

    关闭 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启用定时任务内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜