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

 更新时间:2024年11月15日 09:33:15   作者:种树人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() {
    }
}

参考资料

到此这篇关于如何在 Spring Boot 中启用定时任务的文章就介绍到这了,更多相关Spring Boot启用定时任务内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java实现检测是否字符串中包含中文

    java实现检测是否字符串中包含中文

    本文给大家分享了2个使用java检测字符串中是否包含中文的代码,都非常的实用,最后附上了各种字符的unicode编码的范围,方便我们以后使用正则进行匹配检测。
    2015-10-10
  • Java中List集合去重的几种方式详细解析

    Java中List集合去重的几种方式详细解析

    这篇文章主要介绍了Java中List集合去重的几种方式详细解析,在日常的业务开发中,偶尔会遇到需要将 List 集合中的重复数据去除掉的场景,那么今天我们来看看几种LIst集合去重的方式,需要的朋友可以参考下
    2023-11-11
  • Spring Boot 如何整合连接池

    Spring Boot 如何整合连接池

    这篇文章主要介绍了Spring Boot 如何整合连接池,帮助大家更好的理解和学习spring boot框架,感兴趣的朋友可以了解下
    2020-11-11
  • Java的validation参数校验代码实例

    Java的validation参数校验代码实例

    这篇文章主要介绍了Java的validation参数校验代码实例,Validation参数校验是指在程序运行中对传进来的参数进行合法性检查,以保证程序的正确性和安全性,需要的朋友可以参考下
    2023-10-10
  • 结合线程池实现apache kafka消费者组的误区及解决方法

    结合线程池实现apache kafka消费者组的误区及解决方法

    这篇文章主要介绍了结合线程池实现apache kafka消费者组的误区及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • spring cloud学习入门之config配置教程

    spring cloud学习入门之config配置教程

    这篇文章主要给大家介绍了关于spring cloud学习入门之config配置的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用spring cloud具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-09-09
  • java 实现通过 post 方式提交json参数操作

    java 实现通过 post 方式提交json参数操作

    这篇文章主要介绍了java 实现通过 post 方式提交json参数操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Java如何实现Word文档分栏效果

    Java如何实现Word文档分栏效果

    这篇文章主要介绍了Java如何实现Word文档分栏效果,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • IDEA启动tomcat项目报错53820 socket closed问题及解决

    IDEA启动tomcat项目报错53820 socket closed问题及解决

    IDEA启动Tomcat项目时报错,原因是IDEA关闭时Tomcat未正常关闭,导致端口被占用,解决方法是通过任务管理器关闭占用高内存的Java进程,通常是IDEA进程下面的,或者使用命令行找到PID并强制终止进程
    2024-12-12
  • 微信js-sdk+JAVA实现“分享到朋友圈”和“发送给朋友”功能详解

    微信js-sdk+JAVA实现“分享到朋友圈”和“发送给朋友”功能详解

    本文分享了微信js-sdk+JAVA实现“分享到朋友圈”和“发送给朋友”功能介绍,大家可以参考一下
    2018-03-03

最新评论