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实现FTP文件的上传和下载功能的实例代码

    Java实现FTP文件的上传和下载功能的实例代码

    FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。接下来通过本文给大家实例讲解Java实现FTP文件的上传和下载功能,需要的的朋友一起看看吧
    2016-11-11
  • java 实现数组扩容与缩容案例

    java 实现数组扩容与缩容案例

    这篇文章主要介绍了java 实现数组扩容与缩容案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • Spring Shell 命令行实现交互式Shell应用开发

    Spring Shell 命令行实现交互式Shell应用开发

    本文主要介绍了Spring Shell 命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价值,感兴趣的可以了解一下
    2025-04-04
  • Java的MoreSuppliers工具类方法解析

    Java的MoreSuppliers工具类方法解析

    这篇文章主要介绍了Java的MoreSuppliers工具类方法解析,MoreSuppliers类是一个Java工具类,它提供了一些增强的Supplier函数,使得Supplier执行的结果可以被缓存,真正的调用只执行一次,需要的朋友可以参考下
    2024-01-01
  • Java多线程中停止线程遇到线程阻塞的处理方法详解

    Java多线程中停止线程遇到线程阻塞的处理方法详解

    这篇文章主要介绍了Java多线程中停止线程遇到线程阻塞的处理方法详解,在阻塞状态下,线程会释放CPU资源,从而允许其他线程执行,线程阻塞是实现多线程编程中重要的概念,可以提高程序的效率和资源利用率,需要的朋友可以参考下
    2023-10-10
  • Spring Boot利用@Async异步调用:使用Future及定义超时详解

    Spring Boot利用@Async异步调用:使用Future及定义超时详解

    这篇文章主要给大家介绍了关于Spring Boot利用@Async异步调用:使用Future及定义超时的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用spring boot具有一定的参考学习价值,需要的朋友可以参考下
    2018-05-05
  • 使用SpringDataJpa创建中间表

    使用SpringDataJpa创建中间表

    这篇文章主要介绍了使用SpringDataJpa创建中间表,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • springboot+redis实现微博热搜排行榜的示例代码

    springboot+redis实现微博热搜排行榜的示例代码

    本文主要介绍了springboot+redis实现微博热搜排行榜的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • MyBatis查询缓存实例详解

    MyBatis查询缓存实例详解

    查询缓存的使用,主要是为了提高查询访问速度。这篇文章主要介绍了MyBatis查询缓存,需要的朋友可以参考下
    2017-06-06
  • 一文彻底弄懂spring boot自动配置的过程(推荐)

    一文彻底弄懂spring boot自动配置的过程(推荐)

    SpringBoot的自动配置机制通过@SpringBootApplication注解作为起点,结合@EnableAutoConfiguration和spring.factories文件,实现了基于类路径依赖、环境配置和自定义代码的智能化配置,感兴趣的朋友跟随小编一起看看吧
    2024-10-10

最新评论