当前位置: 首页 > news >正文

Spring Task—定时任务

Spring Task 是 Spring 提供的一种轻量级定时任务调度功能,内置在 Spring 框架中。与 Quartz 等重量级调度框架相比,Spring Task 使用简便,无需额外依赖,适合在简单的调度任务场景中使用。通过注解配置方式,开发者可以快速实现周期性任务执行,非常适合 Spring Boot 项目中的定时任务需求。

1. 介绍

Spring Task 是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。

  • 简介:Spring Task 提供了 @Scheduled 注解,通过此注解可以为方法添加定时任务,实现任务调度。
  • 使用场景:需要定时处理的场景都可以使用Spring Task 。
  • 主要特性
    • 简单配置:只需简单的注解配置,使用方便。
    • 支持多种时间表达式:支持固定速率执行、固定延迟执行和 Cron 表达式调度。
    • 灵活性:可配合 Spring Boot 的配置文件,实现动态任务调度。

2. 使用步骤

2.1 引入依赖

Spring Task 是 Spring 框架的内置功能,在 Spring Boot 项目中无需额外依赖,仅需在主启动类中启用定时任务。

2.2 启用定时任务

在 Spring Boot 项目主启动类中,通过 @EnableScheduling 注解启用定时任务调度。

@SpringBootApplication
@EnableScheduling  // 启用定时任务功能
public class TaskApplication {public static void main(String[] args) {SpringApplication.run(TaskApplication.class, args);}
}

2.3 使用 @Scheduled 注解定义定时任务

@Scheduled 注解用于声明一个方法为定时任务,可以配置不同的时间策略:

  • fixedRate:以固定频率执行,任务开始到下次任务开始的时间间隔固定,单位为毫秒。
  • fixedDelay:以固定延迟执行,任务结束到下次任务开始的时间间隔固定,单位为毫秒。
  • cron:使用 Cron 表达式,支持更精细的调度。

3. @Scheduled 注解的属性详解

3.1 cron 属性

cron表达式在线生成器:在线Cron表达式生成器

ron表达式其实就是一个字符串,通过cron表达式可以定义任务触发的时间

构成规则:分为6或7个域,由空格分隔开,每个域代表一个含义

  • 作用:使用 Cron 表达式来控制任务的执行时间,支持精确的时间控制。
  • Cron 表达式结构秒 分 时 日 月 星期 [年]
  • 示例:任务在每天上午 10:00 执行一次。
@Scheduled(cron = "0 0 10 * * ?")
public void cronTask() {System.out.println("Cron task executed at " + LocalDateTime.now());
}

  • *:表示任意值,例如 * 表示每分钟。
  • ?:仅用于“日”和“星期”字段,表示不指定具体的值。
  • -:表示范围,如 10-12 表示 10 点到 12 点。
  • ,:表示列出多个值,如 MON,WED,FRI 表示星期一、三、五。
  • /:表示增量,如 0/5 表示从 0 开始每隔 5 个单位。
  • L:用于“日”和“星期”字段,表示最后一天或最后一个星期几。
  • W:用于“日”字段,表示离指定日期最近的工作日。
  • #:用于“星期”字段,表示第几个星期几,如 4#2 表示每月第 2 个星期三。

说明:一般的值不同时设置,其中一个设置,另一个用?表示。

3.2 fixedRate 属性

  • 作用:设置任务的固定频率(单位:毫秒),任务开始到下次任务开始的时间间隔固定。
  • 示例:任务每隔 5 秒执行一次,无论上一次任务是否完成,都会在指定的时间间隔后再次执行。
@Scheduled(fixedRate = 5000)
public void fixedRateTask() {System.out.println("Fixed rate task executed at " + LocalDateTime.now());
}

3.3 fixedDelay 属性

  • 作用:设置任务的固定延迟(单位:毫秒),上一次任务结束到下次任务开始的时间间隔固定。
  • 示例:任务在上一次任务结束后延迟 5 秒再执行一次。
@Scheduled(fixedDelay = 5000)
public void fixedDelayTask() {System.out.println("Fixed delay task executed at " + LocalDateTime.now());
}

4. Spring Task 定时任务案例

4.1 创建定时任务类

MyTask中定义各种类型的定时任务方法,使用 @Scheduled 注解指定任务的执行策略。

/*** 自定义定时任务类*/
@Component
@Slf4j
public class MyTask{// 每5秒执行一次任务@Scheduled(fixedRate = 5000)public void fixedRateTask() {System.out.println("Fixed rate task executed at " + LocalDateTime.now());}// 上一次任务结束后延迟5秒再执行任务@Scheduled(fixedDelay = 5000)public void fixedDelayTask() {System.out.println("Fixed delay task executed at " + LocalDateTime.now());}// 每天上午10:00执行任务@Scheduled(cron = "0 0 10 * * ?")public void cronTask() {System.out.println("Cron task executed at " + LocalDateTime.now());}
}

4.2 配置动态化定时任务时间

Spring Task 的默认时间配置在注解中直接设置,但也可以从配置文件读取定时任务的时间,增加动态配置的灵活性。

# application.properties
task.fixed-rate=5000
task.fixed-delay=5000
task.cron-expression=0 0 10 * * ?

MyTask中使用 @Value 注解读取配置文件中的值。

/*** 自定义定时任务类*/
@Component
@Slf4j
public class MyTask{@Scheduled(fixedRateString = "${task.fixed-rate}")public void fixedRateTask() {System.out.println("Dynamic fixed rate task executed at " + LocalDateTime.now());}@Scheduled(fixedDelayString = "${task.fixed-delay}")public void fixedDelayTask() {System.out.println("Dynamic fixed delay task executed at " + LocalDateTime.now());}@Scheduled(cron = "${task.cron-expression}")public void cronTask() {System.out.println("Dynamic cron task executed at " + LocalDateTime.now());}
}

相关文章:

Spring Task—定时任务

Spring Task 是 Spring 提供的一种轻量级定时任务调度功能,内置在 Spring 框架中。与 Quartz 等重量级调度框架相比,Spring Task 使用简便,无需额外依赖,适合在简单的调度任务场景中使用。通过注解配置方式,开发者可以…...

Spring Boot 应用开发概述

目录 Spring Boot 应用开发概述 Spring Boot 的核心特性 Spring Boot 的开发模式 Spring Boot 在企业应用开发中的优势 结论 Spring Boot 应用开发概述 Spring Boot 是由 Pivotal 团队开发的一个框架,基于 Spring 框架,旨在简化和加速基于 Spring …...

Chrome谷歌浏览器加载ActiveX控件之allWebDesktop控件介绍

背景 allWebDesktop控件是一款方便用户在线打开各类文档的OA办公控件。它设计比较轻巧,充分利用计算机程序资源打开文档,并将程序窗口嵌入到allWebDesktop控件区域内,从而实现浏览器内打开各类文档效果。 allWebPlugin中间件是一款为用户提供…...

GitHub Star 数量前 5 的开源应用程序生成器

欢迎来的 GitHub Star 数量排名系列文章的第 7 篇——最受欢迎的应用程序生成器。 之前我们已经详细探讨过:在 GitHub 上最受欢迎的——无代码工具、低代码项目、内部工具、CRUD项目、自部署项目和 Airtable 开源替代品。累计超过 50 个优质项目!&#…...

DBC文件当中新建CANFD等类型的报文

同学最近有添加CANFD报文的需求,需要用到CANFD类型报文的DBC文件,这下就难住我了,我之前用的DBC文件只有“CAN Standard”“CAN Extended”两种类型,压根没见过FD的。 后来他找到了项目之前的DBC,打开来看&#xff0c…...

基于SpringBoot的房地产销售管理系统【附源码】

基于SpringBoot的房地产销售管理系统(源码L文说明文档) 目录 4 系统设计 4.1用户登录功能的详细实现 4.2管理员权限的功能实现 4.2.1客户信息管理功能的详细实现 4.2.2房产管理功能的详细实现 4.2.3预约看房功能的详细实现 4.2.4论…...

圆点虚线 Android

参考 https://blog.csdn.net/l_o_s/article/details/73550876 <com.xxx.wwww.weight.PointDividerViewandroid:layout_width"match_parent"android:layout_height"wrap_content"app:PDbackgroundColor"color/white"app:dotColor"color/…...

贵州鑫宏远农业-始终致力于推动现代农业的科技创新与发展

贵州鑫宏远农业科技有限公司&#xff0c;是一家在高科技农业领域深耕细作、锐意进取的企业。自成立以来&#xff0c;我们始终致力于推动现代农业的科技创新与发展&#xff0c;业务全面覆盖农业科学研发、组织培养生产、专业育苗培植、半成品及成品精细化养护、市场销售以及全方…...

程序员做销售,从代码到客户的逆袭之路

大家好&#xff0c;我是小悟。 在这个互联网风起云涌、技术迭代日新月异的时代&#xff0c;“跨界”已然成为一种新潮流。就好似那从天而降的大侠&#xff0c;一不小心就可能横跨了数个充满奇遇与挑战的领域。 想象一下&#xff0c;一个平日里只跟代码打交道的程序员&#xf…...

Flink CDC系列之:理解学习Kubernetes模式

Flink CDC系列之&#xff1a;理解学习Kubernetes模式 准备会话模式启动会话集群设置 Flink CDC提交 Flink CDC Job Kubernetes 是一种流行的容器编排系统&#xff0c;用于自动化计算机应用程序的部署、扩展和管理。Flink 的原生 Kubernetes 集成允许您直接在正在运行的 Kuberne…...

git合并相关操作详解

在使用Git进行分支管理时,合并(merge)操作是非常常见的。下面是Git合并相关的详细步骤和一些常见的场景及注意事项。 一、 基本合并操作 假设我们有两个分支:main 和 feature,希望将 feature 合并到 main 上。 切换到目标分支 首先需要切换到你想合并到的分支。例如,切…...

前端经典【面试题】持续更新HTML、CSS、JS、VUE、FLUTTER、性能优化等

HTML/CSS 面试题 什么是语义化 HTML&#xff1f; 说明&#xff1a;语义化 HTML 使用 HTML 标签来描述内容的含义&#xff0c;而不仅仅是其外观。使用语义化标签可以提高可读性和可访问性&#xff0c;并对 SEO 友好。示例&#xff1a; <header><h1>网站标题</h1&…...

【Linux知识】linux磁盘管理深入了解

文章目录 常见磁盘管理命令行磁盘分区NASNAS 磁盘挂载&#x1f510; 如何设置NAS设备的访问权限&#xff1f; Mkfs&#x1f9d0; mkfs 命令支持哪些文件系统类型&#xff1f; Mount&#x1f511; 在Linux中&#xff0c;如何安全地卸载挂载的文件系统&#xff1f; 常见磁盘管理命…...

Qt Essential Classes

目录 QVariant QFlags QRandomGenerator 经典的Qt容器 QVector QList QMap QMultiMap QSet QHash QVariant 同std::variant是一样的&#xff0c;他是一个更加高级的union。在一个时间下&#xff0c;它虽然实际上只能是一种类型&#xff0c;但是一个variant可以hold住…...

小小猫棒onu替换家用光猫,薅运营商带宽羊毛,突破1000M

小小猫棒onu 一、总体步骤 1 记录原来光猫信息 主要包括SN&#xff0c;ploam密码&#xff0c;loid、loid密码、 mac、上网的vlan id等 一般gpon采用SN、ploam密码、SNploam密码三种中的一种认证方式 一般Epon采用loid&#xff08;逻辑id&#xff09;、mac、loid mac三种中…...

软件测试学习笔记丨Selenium学习笔记:css定位

本文转自测试人社区&#xff0c;原文链接&#xff1a;https://ceshiren.com/t/topic/22511 本文为霍格沃兹测试开发学社的学习经历分享&#xff0c;写出来分享给大家&#xff0c;希望有志同道合的小伙伴可以一起交流技术&#xff0c;一起进步~ 说明&#xff1a;本篇博客基于sel…...

python数据处理常用操作

数据处理是机器学习中非常重要的一步&#xff0c;以下是一些常用的操作和示例代码&#xff1a; 1. 数据清洗 处理缺失值&#xff1a; import pandas as pd# 读取数据 df pd.read_csv(data.csv)# 删除缺失值 df.dropna(inplaceTrue)# 用均值填充缺失值 df.fillna(df.mean(), i…...

解决minio跨域问题

MinIO 支持跨域资源共享(CORS)&#xff0c;允许你配置跨域请求的相关策略。以下是一个基本的CORS配置示例&#xff0c;你可以在MinIO的配置文件&#xff08;例如config.json&#xff09;中设置这些策略&#xff1a; 在Linux中 root/.minio 目录下如果没有就新建一个 config.jso…...

python 跳过当前循环

在 Python 中&#xff0c;可以使用 continue 语句来跳过当前循环的剩余部分&#xff0c;并继续下一次循环。continue 语句用于跳过循环体中剩余的语句&#xff0c;并立即开始下一次迭代。 以下是一个简单的示例&#xff0c;演示了如何在 for 循环中使用 continue 语句&#xf…...

数据库数据恢复—Oracle ASM磁盘组掉线 ,ASM实例无法挂载的数据恢复案例

Oracle数据库数据恢复环境&故障&#xff1a; Oracle ASM磁盘组由4块磁盘组成。Oracle ASM磁盘组掉线 &#xff0c;ASM实例不能mount。 Oracle数据库故障分析&恢复方案&#xff1a; 数据库数据恢复工程师对组成ASM磁盘组的磁盘进行分析。对ASM元数据进行分析发现ASM存储…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

DBLP数据库是什么?

DBLP&#xff08;Digital Bibliography & Library Project&#xff09;Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高&#xff0c;数据库文献更新速度很快&#xff0c;很好地反映了国际计算机科学学术研…...

32单片机——基本定时器

STM32F103有众多的定时器&#xff0c;其中包括2个基本定时器&#xff08;TIM6和TIM7&#xff09;、4个通用定时器&#xff08;TIM2~TIM5&#xff09;、2个高级控制定时器&#xff08;TIM1和TIM8&#xff09;&#xff0c;这些定时器彼此完全独立&#xff0c;不共享任何资源 1、定…...