快速上手,spring boot3整合task实现定时任务

news2024/9/27 19:20:18

在已经上线的项目中,定时任务是必不可少的。基于spring boot自动装配的原理,我们要集成task定时任务还是非常简单的。只需要简单的两步就可以实现。

1、创建一个spring boot项目,并在项目的启动类(也不一定非要是启动类,只要@Configuration注解标识过的配置类就行)上加@EnableScheduling注解。这个注解用于开启定时任务的支持

@SpringBootApplication
@EnableScheduling
public class Springjdk21TestApplication {

    public static void main(String[] args) {
        SpringApplication.run(Springjdk21TestApplication.class, args);
    }

}

2、直接在项目中使用定时任务即可。

创建一个bean。在这个bean中创建想要定时执行的方法,并在这个方法上加入@Scheduled注解即可。

@Component
public class TestTask {
/**
 * 定时任务,每隔5秒执行一次
 */
@Scheduled(fixedRate = 5000)
public void sayHello() {

    System.out.println("say hello========>"+ 
            new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));

}

}

fixedRate表示从启动项目开始,每个多少毫秒执行一次。

现在启动我们的主类,可以看到定时任务已经执行;

可以看到,每个5秒钟,控制台输出了一次打印语句。

当然,使用fixedRate参数只能实现简单的定时任务,假如我们的定时任务比较复杂呢。比如,我们要自定义任务的开始时间和执行间隔,这时fixedRate已经不能满足我们的需求了,我们需要使用另一种方法,cron表达式。

cron表达式是一种用于配置定时任务(计划任务)执行时间的字符串表达式

一个cron表达式由6或7个字段组成,分别表示如下时间单位:

  1. 秒(Seconds) - 0 - 59
  2. 分(Minutes) - 0 - 59
  3. 小时(Hours) - 0 - 23(24小时制)
  4. 日期(Day of Month) - 1 - 31
  5. 月份(Month) - 1 - 12 或 JAN-DEC
  6. 星期几(Day of Week) - 0 - 7 或 SUN-SAT(7或0表示星期天)
  7. 年份(Year,可选) - 1970 - 2099

字段之间使用空格分隔,表示时间的顺序。

(在标准的cron表达式中,通常是6个字段,不包括年份。但是,有些系统和应用允许扩展cron表达式到7个字段,加入年份字段。(7个字段)可能不被所有cron作业调度器支持,特别是在一些Unix/Linux系统中。在Java的Spring框架中,如果你使用@Scheduled注解,通常不需要指定年份,因为Spring的调度器默认不会扩展到7个字段。)

当然,现在的spring boot的高版本也不支持cron的7个参数了。cron表达式的设计初衷是为了在操作系统层面设置周期性的计划任务,而不是用来安排一次性的特定日期和时间。如果你需要在特定年份执行任务,你应该使用应用程序逻辑来处理年份,或者选择一个不同的调度方法来处理跨年度的任务。

特殊字符:

  • *:代表所有可能的值。例如,在分钟字段中使用*,表示每分钟。
  • ?:表示不指定值。只能在日期和星期几字段中使用。
  • -:表示一个范围。例如,10-12 小时 表示从上午10点到12点。
  • /:表示起始时间开始,每隔一定的间隔执行。例如,在分钟字段中使用0/30,表示每30分钟。
  • L:表示“Last”,只能用于日期和星期几字段。例如,在日期字段使用L,表示月份的最后一天。
  • W:表示有效工作日(周一到周五),不能和L一起使用,只能用于日期字段。
  • #:表示星期几的第几个周。例如,6#3表示某月的第三个星期天。

一般,我们只需要知道cron表达式对应的含义就行,不需要我们自己进行编写。使用到的时候直接在往上搜一个在线的生成网址即可。

cron的在线生成网址:在线Cron表达式生成器 (qqe2.com)

我们需要的时候,直接使用图形化的界面点击生成相应的cron表示式即可。

* * 12 1 * ? 

这个cron是我使用网址生成的,表示每个月1号的中午12点执行一次。

@Component
public class TestTask {
/**
 * 定时任务,每隔5秒执行一次
 */
@Scheduled(cron = "* * 12 1 * ?")
public void sayHello() {
    System.out.println("say hello========>"+
            new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
}

}

由于spring boot的自动装配,官方已经帮我们做了很多工作。我们只需要安装官方的约定,简单的做一些配置就可以轻松的实现绝大多数功能。

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

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

相关文章

二手车小程序

本文来自:FastAdmin二手车小程序 - 源码1688 一款基于ThinkPHPFastAdmin开发的原生微信小程序二手车管理系统。 前端小程序码: 后台演示地址: https://facars.site100.cn/OHNYSKzuba.php/carswxsys/sysinit?refaddtabs

wpf中轮询显示图片

本文的需求是,在一个文件夹中,放一堆图片的集合,然后在wpf程序中,按照定时的方式,循序显示照片。 全部代码 1.声明一个PictureInfo类 namespace WpfApp1 {public class PictureInfo{public string? FileName { get; …

GPT-4o mini小型模型具备卓越的文本智能和多模态推理能力

GPT-4o mini 是首个应用OpenAI 指令层次结构方法的模型,这有助于增强模型抵抗越狱、提示注入和系统提示提取的能力。这使得模型的响应更加可靠,并有助于在大规模应用中更安全地使用。 GPT-4o mini 在学术基准测试中,无论是在文本智能还是多模…

mac怎样清理photoshop垃圾的方法 ps清理缓存和垃圾 苹果电脑暂存盘已满怎么清理

很多使用过ps,尤其是Adobe全家桶的小伙伴会发现,这些软件占用缓存很多,而且随着使用时间的增长,缓存也会越多,并不会自动清理。那么mac系统怎么清理ps暂存盘呢?mac又该怎么最高效清理磁盘空间呢&#xff1f…

【专题】2024年云计算白皮书报告合集PDF分享(附原数据表)

原文链接:https://tecdat.cn/?p37112 2023年全球云计算市场显著增长,预计将持续繁荣至2027年突破万亿美元,中国市场同样保持强劲势头,预计也将大幅跃升。国内云计算经过十余年发展,虽取得显著进展,但在资…

【系统架构设计师】十八、信息系统架构设计理论与实践②

目录 四、企业信息系统的总体框架 4.1 战略系统 4.2 业务系统 4.3 应用系统 4.4 企业信息基础设施 4.5 业务流程重组BPR 4.6 业务流程管理BPM 五、信息系统架构设计方法 5.1 行业标准的体系架构框架 5.2 架构开发方法 5.3 信息化总体架构方法 5.4 信息化建设生命周…

基于联咏 NT98692芯片赋能边缘计算IP摄像机与XVR监控系统解决方案

联咏 NT98692 是一款新世代整合度极高的 SoC,具有高影像品质、低位元率、低功耗,针对 8Kp30 边缘运算 IP 摄影机与后端监控系统 XVR 应用。此 SoC 整合了 ARM Quad Cortex A73 CPU 核心、新一代 ISP 和 AI ISP、H.265/H.264 视讯压缩编解码器、DSP、高效…

k8s核心知识总结

写在前面 时间一下子到了7月份尾;整个7月份都乱糟糟的,不管怎么样,日子还是得过啊, 1、7月份核心了解个关于k8s,iceberg等相关技术,了解了相关的基础逻辑,虽然和数开主线有点偏,但是…

流量回放新形态:基于网关 Access Log 发起

作者:休祯 背景 为什么需要流量回放 无论是面向即将上线的新版本做最后的性能测试,还是在遇到棘手的故障时帮助开发人员快速定位问题原因,流量回放技术都发挥着不可或缺的作用。使用真实世界的流量数据进行回放能使性能测试过程更加接近实…

Ubuntu22.04手动安装fabric release-2.5版本

这个过程稍微有点复杂,但完整操作完成以后会对Fabric网络有更加深入的理解,方便后续自己手动搭建Fabric网络。这个过程需要手动逐个下载Fabric源代码、使用命令下载Fabric镜像和用Git下载例子程序。 Fabric源代码主要用途是用来编译cryptogen、configtx…

ElasticSearch(六)— 全文检索

一、match系列查询 前面讲到的query中的查询,都是精准查询。可以理解成跟在关系型数据库中的查询类似。match系列的查询,是全文检索的查询。会通过分词进行评分,匹配,再返回搜索结果。 1.1 match 查询 "query": {&qu…

按图搜索新体验:阿里巴巴拍立淘API返回值详解

阿里巴巴拍立淘API是一项基于图片搜索的商品搜索服务,它允许用户通过上传商品图片,系统自动识别图片中的商品信息,并返回与之相关的搜索结果。以下是对阿里巴巴拍立淘API返回值的详细解析: 一、主要返回值内容 商品信息 商品列表…

20240725项目的maven环境报红-重新配置maven

1.在编辑器里面打开项目,导入源码 (1)找到项目的地址C:\Users\zzz\IdeaProjects\datasys,然后右击用idea编辑器打开。 (2)idea中上菜单栏打开open,然后输入file,选择源代码文件 2.…

primetime如何合并不同modes的libs到一个lib文件

首先,用primetime 抽 timing model 的指令如下。 代码如下(示例): #抽lib时留一些margin, setup -max/hold -min set_extract_model_margin -port [get_ports -filter "!defined(clocks)"] -max 0.1 #抽lib extract_mod…

算法学习笔记(8.8)-多重背包

目录 Question: 思路解析: 代码示例 多重背包的优化问题: 1.二进制优化 代码示例: 2.单调队列优化(滑动窗口) 代码示例 Question: 4. 多重背包问题 I - AcWing题库https://www.acwing.com/problem/content/description/4/ 多重背包简单来说其…

深入理解 Java 虚拟机第三版(周志明)

这次社招选的这本作为 JVM 资料查阅,记录一些重点 1. 虚拟机历史 Sun Classic VM :已退休 HotSpot VM:主流虚拟机,热点代码探测技术 Mobile / Embedded VM :移动端、嵌入式使用的虚拟机 2.2 运行时数据区域 程序计…

基于java多媒体网络教学平台设计与开发

博主介绍:专注于Java .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的可以…

使用 Visual Studio 2022 自带的 cl.exe 测试编译 opencv helloworld

1. 参考博客&#xff1a;https://blog.csdn.net/yangSHU21/article/details/130237669( 利用OpenCV把一幅彩色图像转换成灰度图 )( 代码用的此博客的&#xff0c;就改了下图片文件路径而已 )。 2. 编译探索步骤&#xff1a; test.cpp&#xff1a; #include <iostream>…

三维点云深度网络 PointNeXt 的安装配置与测试

Title: 三维点云深度网络 PointNeXt 的安装配置与测试 文章目录 前言I. 环境创建1. 容器创建2. 容器中安装 CUDA Toolkit 11.3 II. 安装过程1. 安装 PointNeXt2. 解决安装问题 III. 数据准备1. 数据准备的执行2. 数据准备的原理 IV. 运行测试1. 显存溢出2. 训练3. 测试4. 标注颜…

UDP/TCP协议解析

我最近开了几个专栏&#xff0c;诚信互三&#xff01; > |||《算法专栏》&#xff1a;&#xff1a;刷题教程来自网站《代码随想录》。||| > |||《C专栏》&#xff1a;&#xff1a;记录我学习C的经历&#xff0c;看完你一定会有收获。||| > |||《Linux专栏》&#xff1…