Spring Boot如何实现定时任务调度?

news2025/2/24 3:12:52

Spring Boot如何实现定时任务调度?

Spring Boot提供了非常方便的方式来实现定时任务调度,我们可以使用Spring框架自带的@Scheduled注解来实现。在本文中,我们将介绍如何使用@Scheduled注解进行定时任务调度。

在这里插入图片描述

什么是定时任务调度?

在Web应用程序中,我们经常需要定时执行一些任务,例如定时清理缓存、定时发送邮件等。这些任务通常需要在固定的时间间隔内执行,以保证系统的正常运行。定时任务调度就是指在指定的时间间隔内执行一些任务的过程。

Spring Boot如何实现定时任务调度?

在Spring Boot中,我们可以使用@Scheduled注解来实现定时任务调度。@Scheduled注解是Spring框架自带的注解,它可以让我们在指定的时间间隔内执行指定的方法。下面是@Scheduled注解的使用方式:

@Scheduled(cron = "0 0/5 * * * ?")
public void doSomething() {
    // 执行任务
}

在上面的代码中,我们定义了一个doSomething()方法,并使用@Scheduled注解来标注这个方法。@Scheduled注解的cron属性指定了这个方法的执行时间间隔。在这个例子中,我们使用了cron表达式0 0/5 * * * ?,表示这个方法会在每小时的0分、5分、10分、15分……55分执行。

除了cron属性之外,@Scheduled注解还有其他几个属性,例如fixedDelayfixedRateinitialDelay。这些属性分别表示延迟多长时间执行、固定速率执行和初始延迟时间。

使用@Scheduled注解的注意事项

在使用@Scheduled注解时,有一些需要注意的事项:

  1. @Scheduled注解只能用于方法上,不能用于类或接口上。

  2. @Scheduled注解的方法必须是无返回值的。

  3. @Scheduled注解的方法不能有参数。

  4. @Scheduled注解的方法不能抛出异常,否则任务会中断。

  5. @Scheduled注解的方法默认是在Spring Boot应用程序的主线程中执行的,如果任务较为耗时,建议使用异步任务或线程池来执行任务。

示例代码

下面是一个使用@Scheduled注解实现定时任务调度的示例代码:

@Component
public class MyScheduler {
    private static final Logger LOGGER = LoggerFactory.getLogger(MyScheduler.class);

    @Scheduled(cron = "0 0/5 * * * ?")
    public void doSomething() {
        LOGGER.info("定时任务开始执行");
        // 执行任务
        LOGGER.info("定时任务执行完成");
    }
}

在上面的代码中,我们定义了一个名为MyScheduler的组件,并在这个组件中使用@Scheduled注解来标注了一个名为doSomething()的方法。这个方法会在每小时的0分、5分、10分、15分……55分执行。在这个方法中,我们使用了LoggerFactory来打印日志信息,并在任务开始执行和执行完成时打印相应的日志信息。

配置定时任务的线程池

默认情况下,Spring Boot会在应用程序的主线程中执行定时任务。如果需要在独立的线程池中执行定时任务,可以通过配置TaskScheduler来实现。TaskScheduler是Spring框架中用于执行定时任务的接口,它可以使用不同的实现来执行定时任务。下面是一个示例代码,用于配置一个使用线程池的TaskScheduler

@Configuration
@EnableScheduling
public class MySchedulerConfig implements SchedulingConfigurer {
    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
        taskScheduler.setPoolSize(10);
        taskScheduler.initialize();
        taskRegistrar.setTaskScheduler(taskScheduler);
    }
}

在上面的代码中,我们定义了一个名为MySchedulerConfig的配置类,这个类实现了SchedulingConfigurer接口,并重写了configureTasks()方法。在这个方法中,我们创建了一个ThreadPoolTaskScheduler实例,并设置了线程池的大小为10。最后,我们将这个ThreadPoolTaskScheduler实例设置为ScheduledTaskRegistrar的任务调度器。

总结

本文介绍了Spring Boot如何实现定时任务调度,并提供了一个使用@Scheduled注解实现定时任务调度的示例代码。我们还介绍了一些使用@Scheduled注解时需要注意的事项,以及如何配置定时任务的线程池。定时任务调度在Web应用程序中非常常见,对于保证系统的正常运行和维护系统的稳定性都有着非常重要的作用。使用Spring Boot提供的@Scheduled注解,可以轻松地实现定时任务调度,让我们的开发工作更加高效和便捷。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/588599.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网瘾少年转行软件测试,月薪20k? 叛逆少年终归成长...

前言: 高中住校期间沉迷游戏(DNF),尤其是高三那年,晚上翻墙出去通宵,白天上课睡觉,高考自然是考了个稀碎,高考结束那个暑假刚开始觉得整个人都自由了,爸妈看我没考上大学,知道我心情…

使用kong网关来实现负载均衡

一、负载均衡 当前一个服务进行多实例部署后,外部调用其中任意一个服务地址都可以得到响应。但是外部不可能记住也不应该记住所有的服务地址,这个时候就需要一个统一入口提供给外部进行调用,类似提供一个虚拟主机形式进行实现。后续就请求这…

Socket(七)

文章目录 1. 单文件服务器2. 重定向器Redirector3. 功能完备的HTTP服务器 1. 单文件服务器 要研究HTTP服务器,先从一个简单的服务器开始,无论接受什么请求,这个服务器都始终发送同一个文件。这个单文件服务器名为SingleFileHTTPServer&#…

泛型的介绍以及原理

目录 一、前言 二、什么泛型 三、为什么要使用泛型 3.1、保证了类型的安全性。 3.2、消除强制转换 3.3、提高程序的性能 3.4、 提高了代码的重用性 四、如何使用泛型 4.1、 泛型类 4.2、泛型接口 4.3、泛型方法 五、泛型通配符 5.1、无边界的通配符 5.2、固定上边…

telnet 120.XX8888会超时或者无反应,防火墙加入8888,安全组也加入8888,但是访问120.XX:8888也没有反应

⚠️命令都是远程登录的哦 选这个远程连接: 初次密码自己设置别忘了 1、看是否8888端口是否有正常监听 netstat -ntlp我这边清楚看到没有8888 2、如果没有监听是无法连接,需要安装对应的程序同时监听8888端口 比如我想用宝塔面板 我就需要下载宝塔面…

一步步入门编写PHP扩展

1、写在最前 随着互联网飞速发展,lamp架构的流行,php支持的扩展也越来越多,这样直接促进了php的发展。 但是php也有脚本语言不可避免的问题,性能比例如C等编译型语言相差甚多,所以在考虑性能问题的时候最好还是通过php…

00后实在太强了,98年的我被卷废了,太离谱了...

前言 最近在公司我真的感受到了什么叫“卷”,以往的我划划水日子过的轻轻松松,直到公司最近招了一个00后进来,真的让我感受到了危机,刚进来工资就和我差不多,我刚开始其实有点不太舒服,凭什么我辛辛苦苦干…

在pycharm中调用qt界面功能

目录 一、新建designer文件 1、打开pycharm中的designer 2、创建个widget 3、拖动几个简单按钮 4、保存一下 5、右击test1.ui 这边首先环境已经配置完毕,可以参考之前写的博客: 关于PyQt5的环境搭建_Littlehero_121的博客-CSDN博客 一、新建desi…

如何使用PHM技术提高汽车工业的效率和性能?

在汽车工业中,预测性健康管理(PHM)技术正日益受到关注。作为一种基于数据驱动的解决方案,PHM技术通过实时监测和分析设备和系统的状态,实现对设备健康状况的预测和管理。 图.汽车制造(iStock) 汽…

代码示范【FabEdge v0.8.0】配置 connector 公开端口

FabEdge项目简介: FabEdge是博云在2021年8月发起,基于Kubernetes 构建的专注于边缘计算场景的容器网络方案,支持 KubeEdge 、SuperEdge、OpenYurt 等主流边缘计算框架。旨在解决边缘计算场景下容器网络配置管理复杂、网络割裂互不通信、缺少…

hadoop单机版部署

1.下载hadoop wget --no-check-certificate https://mirrors.bfsu.edu.cn/apache/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz 2.解压重命名 tar -zxvf hadoop-3.3.1.tar.gz mv hadoop-3.3.1.tar.gz hadoop 3.编辑hosts vim /etc/hosts 172.17.1.1 hadoop925 4.进入配置…

4.Apache网页优化

文章目录 Apache网页优化网页压缩网页缓存隐藏版本信息Apache防盗链 Apache网页优化 Apache网页优化 网页压缩网页缓存 Apache安全优化 隐藏版本信息配置防盗链 网页压缩 配置Apache的网页压缩功能,是使用gzip压缩算法来对网页内容进行压缩后再传输到客户端浏览器…

LNMT架构之反向代理负载均衡

目录 一、实验前提环境配置 (一)关闭防火墙,安装本地yum (二)部署tomcat (三)部署Mariadb (四)部署nginx 二、反向代理负载均衡 方法一:(轮…

【算法学习系列】07 - 无序数组中的局部最小值问题

文章目录 说明约束条件简单说下思路解决方案随机无序数组样本生成器算法实现验证代码进行大样本随机测试验证算法正确性 说明 在算法中,局部最小值是指一个函数在一个局部范围内的最小值。 具体而言,如果一个函数在一个小区间内的取值都比该区间内的其他…

C++:STL--priority_queue

文章目录 一.STL设计思想:容器适配器STL--stack的代码设计STL--queue的代码设计stack和queue的默认容器适配器deque的数据结构解析deque的存储结构示意图 二.C仿函数仿函数示例 三.STL--priority_queue(优先级队列)1.C优先级队列的数据结构2.priority_queue的实现框架比较函数(…

chatgpt赋能python:Python中创建画布的函数——matplotlib

Python中创建画布的函数——matplotlib Python作为一种强大的编程语言,拥有许多重要且广泛应用的模块和库。其中,matplotlib是一种用于制作高质量的图形和图表的库,而创建画布的函数便是其基础功能之一。 什么是matplotlib? Ma…

C语言---初始C语言

1、初始C语言 1、编译器主要有:Clang、GCC、WIN-TC、MSVC、Turbo C等 什么是编译? test.c----------------------------->test.exe 这个过程需要经过编译、链接等过程,而众多编译器实现的功能就是把我们写的test.c进行编译。 2、VS20…

如何把“困在”内网的数据释放,进行安全的流转传输呢?

互联网大时代,数据的生产使用与互联网紧密相关,但数据安全和网络安全却既有联系又互不相同。数据安全和网络安全的突出区别是核心主体不同,数据安全关注的数据全生命周期的安全,而网络安全则是侧重保障网络体系和网络环境的安全性…

硬卷完了!低代码打怪升级进阶成神之路(2023年最新版)

一、背景 应用开发周期长一直是IT部门和业务部门面临的问题。 IT部门总是被新的应用需求弄得不堪重负。他们不可能完成业务部门想要完成的每一个项目。同时,业务部门的用户厌倦了等待,并开始完全绕过IT部门。 今天,我们来探索一下“低代码开发…

制药企业高效过滤器检漏参考法规、方法及操作步骤

对制药企业来讲,高效过滤器检漏主要是现场检漏,通过DOP法来发现滤器本身及运输、安装过程中可能存在的问题。常使用气溶胶光度计及多分散气溶胶进行检漏。依据的标准是2010药品GMP指南(测试方法采用ISO14644-3)。 对于制药企业来说,高效过滤器…