Springboot项目中定时任务的四种实现方式

news/2024/5/21 1:34:08/文章来源:https://blog.csdn.net/weixin_43025151/article/details/136335795

文章目录

    • 1. 使用@Scheduled注解
      • 1.1 时间间隔执行
      • 1.2 固定时间点执行
    • 2. 使用@EnableScheduling注解启用定时任务
    • 3. 实现SchedulingConfigurer接口
    • 4. 使用Quartz框架
      • 4.1 配置QuartzScheduler
      • 4.2 定义Job类和Trigger类
    • 5. 总结

在这里插入图片描述

在开发现代应用时,定时任务是一个非常常见的需求。无论是数据清理、数据同步、报表生成还是其他周期性任务,都可以通过定时任务来实现。Spring框架为我们提供了多种实现定时任务的方式,让我们可以根据项目的需求和特点来选择合适的方式。

1. 使用@Scheduled注解

Spring的@Scheduled注解是一种非常简单和便捷的实现定时任务的方式。通过在方法上添加@Scheduled注解,我们可以指定方法在特定的时间间隔或固定的时间点执行。

1.1 时间间隔执行

@Component
public class ScheduledTasks {@Scheduled(fixedRate = 5000) // 每隔5秒执行一次public void task1() {// 定时任务逻辑}@Scheduled(fixedDelay = 10000) // 上次执行结束后延迟10秒再执行public void task2() {// 定时任务逻辑}@Scheduled(initialDelay = 5000, fixedRate = 10000) // 延迟5秒后,每隔10秒执行一次public void task3() {// 定时任务逻辑}
}

1.2 固定时间点执行

@Component
public class ScheduledTasks {@Scheduled(cron = "0 0 0 * * ?") // 每天零点执行public void task4() {// 定时任务逻辑}@Scheduled(cron = "0 0 12 * * MON-FRI") // 每个工作日中午12点执行public void task5() {// 定时任务逻辑}
}

2. 使用@EnableScheduling注解启用定时任务

除了在定时任务类中直接使用@Scheduled注解外,我们还可以通过在主类上添加@EnableScheduling注解来启用定时任务功能。

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

然后在定时任务类中使用@Scheduled注解定义定时任务方法,与之前的方式相同。

3. 实现SchedulingConfigurer接口

如果我们需要更灵活地配置定时任务,比如动态地改变定时任务的执行频率或者添加多个定时任务,可以通过实现SchedulingConfigurer接口来实现。

@Configuration
@EnableScheduling
public class ScheduledConfig implements SchedulingConfigurer {@Overridepublic void configureTasks(ScheduledTaskRegistrar taskRegistrar) {taskRegistrar.addTriggerTask(() -> {// 定时任务逻辑},triggerContext -> {CronTrigger cronTrigger = new CronTrigger("0 0 0 * * ?"); // 每天零点执行return cronTrigger.nextExecutionTime(triggerContext);});}
}

4. 使用Quartz框架

如果需要更强大和灵活的定时任务功能,比如支持集群部署、任务调度、错过任务处理等,可以选择集成Quartz框架。

4.1 配置QuartzScheduler

首先需要配置QuartzScheduler,在Spring Boot中可以通过配置文件或者Java代码来配置。

@Configuration
public class QuartzConfig {@Beanpublic SchedulerFactoryBean schedulerFactoryBean() {SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();// 其他配置return schedulerFactoryBean;}
}

4.2 定义Job类和Trigger类

@Component
public class MyJob implements Job {@Overridepublic void execute(JobExecutionContext context) throws JobExecutionException {// 定时任务逻辑}
}@Configuration
public class QuartzConfig {@Beanpublic JobDetail myJobDetail() {return JobBuilder.newJob(MyJob.class).withIdentity("myJob").storeDurably().build();}@Beanpublic Trigger myTrigger() {return TriggerBuilder.newTrigger().forJob(myJobDetail()).withIdentity("myTrigger").withSchedule(CronScheduleBuilder.cronSchedule("0 0 0 * * ?")) // 每天零点执行.build();}
}

5. 总结

通过上述的四种方法的实践,无论使用简单的@Scheduled注解还是更灵活的Quartz框架,都可以满足不同项目的需求。选择合适的方式,并结合实际场景,定时任务将为你的应用增添更多的价值和灵活性。

在这里插入图片描述


难熬的日子总会过去,不信你回头看看,你都已经在不知不觉中,熬过来很多苦难,余生很长,不必慌张。


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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Peter算法小课堂—动态规划

Peter来啦,好久没有更新了呢 今天,我们来讨论讨论提高组的动态规划。 动态规划 动态规划有好多经典的题,有什么背包问题、正整数拆分、杨辉三角……但是,如果考到陌生的题,怎么办呢?比如说2000年提高组的…

压缩视频大小的软件有哪些?5款软件推荐

压缩视频大小的软件有哪些?随着高清摄像设备的普及和网络速度的不断提升,视频文件变得越来越庞大,动辄数百兆甚至数GB的大小常常让用户在分享和存储时感到头疼。幸运的是,市面上有许多优秀的视频压缩软件可以帮助我们轻松应对这一…

国产服务器操作系统

为何记录 最近的开发工作经常接触到国产服务器操作系统的业务,经常被x86、arm、龙芯、鲲鹏、欧拉...搞得一脸懵逼,遂记之! 操作系统 这里按照应用场景分: 桌面操作系统:主要用于pc,如Windows、macOS、Li…

SpringMVC01、回顾MVC

1、回顾MVC 1.1、什么是MVC MVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范。是将业务逻辑、数据、显示分离的方法来组织代码。MVC主要作用是降低了视图与业务逻辑间的双向偶合。MVC不是一种设计模式,MVC是一种架构模式。…

ETL数据仓库的使用方式

一、ETL的过程 在 ETL 过程中,数据从源系统中抽取(Extract),经过各种转换(Transform)操作,最后加载(Load)到目标数据仓库中。以下是 ETL 数仓流程的基本步骤&#xff1a…

【物联网应用案例】智能农业的 9 个技术用例

一、农业中的物联网用例 一般而言,农业物联网传感器以及农业物联网应用有多种类型: 1. 气候条件监测 气象站无疑是当今智能农业领域最受欢迎的设备。这款设备集成了多种智能农业传感器,能够在现场对各类数据进行收集,然后迅速将…

动态规划--(算法竞赛、蓝桥杯)--二维费用背包

1、B站视频链接&#xff1a;E15 背包DP 二维费用背包_哔哩哔哩_bilibili #include <bits/stdc.h> using namespace std; int f[101][101]; //f[j][k]第i件物品&#xff0c;体积<j,重量<k的最大价值int main(){int n,V,W;//物品、容量、承重int v,w,val;//体积、重…

搜索算法(算法竞赛、蓝桥杯)--DFS迭代加深

1、B站视频链接&#xff1a;B25 迭代加深 Addition Chains_哔哩哔哩_bilibili 题目链接&#xff1a;Addition Chains - 洛谷 #include <bits/stdc.h> using namespace std; int n,d;//d为搜索的深度 int a[10005];//存储加成的序列bool dfs(int u){//搜索第u层 if(ud)r…

应急响应-常规处置办法

网站中被植入Webshell&#xff0c;通常代表着网站中存在可利用的高危漏洞&#xff0c;攻击者利用这些漏洞&#xff0c;将Webshell写入网站&#xff0c;从而获取网站的控制权。一旦在网站中发现webshell文件&#xff0c;可采取以下步骤进行临时处置。 入侵确定时间 通过在网站…

frp 内网穿透 linux部署版

frp 内网穿透 linux部署版 前提安装 frp阿里云服务器配置测试服务器配置访问公网 前提 使用 frp&#xff0c;您可以安全、便捷地将内网服务暴露到公网&#xff0c;通过访问公网 IP 直接可以访问到内网的测试环境。准备如下&#xff1a; 公网 IP已部署好的测试服务 IP:端口号阿…

浅谈排序算法(冒泡,插入,归并)

对于数据的排序&#xff0c;有多种方法&#xff0c;对应这不同的时间复杂度&#xff08;效率不同&#xff09;。 ​一、冒泡排序&#xff08;Bubble Sort&#xff09; 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法。 算法思路&#xff1a; 1. 从第一对相…

3月5日济南,2024生物发酵展全新起航!助力打造生物产业经济新时代

生物发酵是生物产业的重要组成部分&#xff0c;近年来&#xff0c;我国生物产业发展迅猛&#xff0c;也已广泛应用于食品、农业、医药、饲料、日化、材料等领域&#xff0c;市场前景广阔。2022年5月&#xff0c;国家发改委发布的《“十四五”生物经济发展规划》明确着力做大做强…

“图像处理新篇章,轻松切割纵向长图,每张都精彩!

在数字化时代&#xff0c;图像处理技术日新月异&#xff0c;人们对图片质量的要求也越来越高。为满足这一需求&#xff0c;新一代图像处理技术应运而生&#xff0c;它以其独特的功能和卓越的效果&#xff0c;为用户带来了前所未有的体验。今天&#xff0c;就让我们一起领略这项…

ImportError: cannot import name ‘_update_worker_pids’ from ‘torch._C’

问题描述&#xff1a; 在复现超分辨率算法RNAN&#xff08;EDSR、RCAN同样的环境&#xff09;的时候报错&#xff0c;torch要求是0.4.0版本的。 解决方案&#xff1a; 解决方法1&#xff08;已安装anaconda&#xff09; 1. 打开命令行&#xff08;这个自行查找&#xff09; …

基于 ECharts的Python 数据可视化库,它允许用户使用 Python 语言生成各种类型的交互式图表和数据可视化

pyecharts 是一个基于 ECharts 的 Python 数据可视化库&#xff0c;它允许用户使用 Python 语言生成各种类型的交互式图表和数据可视化。 ECharts 是由百度开发的一款强大的开源数据可视化库&#xff0c;而 Pyecharts 则是 ECharts 的 Python 封装&#xff0c;使得在 Python 中…

SpringMVC02、什么是SpringMVC

2、什么是SpringMVC 2.1、概述 Spring MVC是Spring Framework的一部分&#xff0c;是基于Java实现MVC的轻量级Web框架。 查看官方文档&#xff1a;Web on Servlet Stack 我们为什么要学习SpringMVC呢? Spring MVC的特点&#xff1a; 轻量级&#xff0c;简单易学高效 , 基…

2024全国水科技大会暨高氨氮废水厌氧氨氧化处理技术论坛(四)

一、会议背景 为积极应对“十四五”期间我国生态环境治理面临的挑战&#xff0c;加快生态环境科技创新&#xff0c;构建绿色技术创新体系&#xff0c;全面落实科学技术部、生态环境部等部委编制的《“十四五”生态环境领域科技创新专项规划》&#xff0c;积极落实省校合作&…

1.1 编写第一个C程序

1.1 编写第一个C程序 在这一节中&#xff0c;我们将介绍如何编写、编译和执行一个简单的C程序。我们将从一个"Hello, World!"程序开始&#xff0c;这是学习任何编程语言时的传统。 1.1.1 创建C源文件 首先&#xff0c;使用任何文本编辑器&#xff08;如Notepad、V…

阿里云降价!云数据库277元一年,价格下调折扣对照表

2024年阿里云百款产品直降&#xff0c;平均降幅20%&#xff0c;不只是云服务器&#xff0c;也包括云数据库&#xff0c;云数据库涉及产品RDS&#xff08;MySQL、PostgreSQL、MariaDB&#xff09;、Redis社区版、MongoDB、ClickHouse社区兼容版。阿里云百科aliyunbaike.com分享阿…

网站高可用架构设计——运维

从公众号转载&#xff0c;关注微信公众号掌握更多技术动态 --------------------------------------------------------------- 一、灰度方案 1.灰度的基本概念 (1)灰度方案引入 一个较大的业务或系统改动&#xff0c;往往会影响整个产品的用户体验或操作流程。为了控制影响…