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

Spring Task详细讲解

✨Spring Task简介

Spring Task 是 Spring 提供的轻量级定时任务工具,也就意味着不需要再添加第三方依赖了,相比其他第三方类库更加方便易用。可以按照约定的时间自动执行某个代码逻辑。

使用场景:

  • 信用卡每月还款提醒
  • 银行贷款每月还款提醒
  • 火车票售票系统处理未支付订单
  • 入职纪念日为用户发送通知

只要是需要定时处理的场景都可以使用Spring Task

 

✨Spring Task中的cron表达式

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

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

秒   分   时   日   月   周   年

每个域的含义分别为:秒,分钟,小时,日,月,周,年(可选)

注意:(周 和 日 不能同时出现,若一定要同时出现,则其中一个必须为“ ?”,因为会产生冲突)

特殊字符:

  • *:代表所有可能的值
  • ?:不指定值,用于日和周字段,表示不关心具体值
  • -:指定一个范围
  • ,:列出多个值
  • /:指定增量
  • L:表示最后一个,例如月的最后一个星期日
  • W:表示最接近指定日期的工作日
  • #:表示第几个,例如周的第几个星期日

更详细的 Cron 表达式示例:

  • 0 0 12 * * ?:每天中午12点触发
  • 0 15 10 ? * MON-FRI:周一至周五每天上午10:15触发
  • 0 0/5 * * * ?:每5分钟触发
  • 0 0 1,12 * * ?:每天凌晨1点和中午12点触发
  • 0 10 1 * * 6L:每个月的最后一个星期五上午10:10触发
  • 0 0 10 ? * 2#3:每个月的第三个星期二上午10:00触发
     

✨基于 @Scheduled 注解的使用:

1、导入maven坐标spring-context(一般是已经存在的)

<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version>
</dependency>

2、启动类添加注解@EnableScheduling开启任务调度

@SpringBootApplication
@EnableScheduling   //开启定时任务
public class MyApplication {// ...
}

3、创建定时任务,采用注解的方式,主要是cron表达式

@Component
public class ScheduledTasks {private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");// 每5秒执行一次@Scheduled(fixedRate = 5000)public void fixedRateTask() {System.out.println("Fixed Rate Task : " + dateFormat.format(new Date()));}// 每分钟执行一次@Scheduled(cron = "0 * * * * ?") // 注意:此处纠正了cron表达式public void cronTask() {System.out.println("Cron Task : " + dateFormat.format(new Date()));}// 上一次任务执行完成后,延迟10秒再执行@Scheduled(fixedDelay = 10000)public void fixedDelayTask() {System.out.println("Fixed Delay Task : " + dateFormat.format(new Date()));try {Thread.sleep(5000); // 模拟任务执行时间} catch (InterruptedException e) {e.printStackTrace();}}// 使用字符串配置,更灵活,支持占位符@Scheduled(fixedRateString = "${my.fixedRate}") // application.properties 中配置 my.fixedRate=6000public void fixedRateStringTask() {System.out.println("Fixed Rate String Task : " + dateFormat.format(new Date()));}
}

✨基于 SchedulingConfigurer 接口的使用

@Configuration
public class TaskSchedulerConfig implements SchedulingConfigurer {@Overridepublic void configureTasks(ScheduledTaskRegistrar taskRegistrar) {taskRegistrar.setScheduler(taskExecutor());}@Bean(destroyMethod="shutdown")public Executor taskExecutor() {ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(5); // 设置线程池大小为5executor.setRemoveOnCancelPolicy(true); // 设置取消策略executor.setThreadNamePrefix("MyScheduled-"); // 设置线程名前缀return executor;}
}

✨异步任务

为了避免阻塞主线程,可以将耗时的定时任务设置为异步执行。

@Component
public class AsyncScheduledTasks {@Async@Scheduled(fixedRate = 5000)public void asyncTask() {// ... 执行耗时操作 ...}
}@Configuration
@EnableAsync // 开启异步任务支持
public class AsyncConfig implements AsyncConfigurer {// ... 配置异步任务线程池 ...
}

 

✨使用案例:

1、首先启动类添加注解@EnableScheduling

@SpringBootApplication
@EnableTransactionManagement //开启注解方式的事务管理
@Slf4j
@EnableCaching      //开启注解方式的事务管理
@EnableScheduling   //开启任务调度
public class SkyApplication {public static void main(String[] args) {SpringApplication.run(SkyApplication.class, args);log.info("server started");}
}

2、task定时方法

@Component
@Slf4j
public class MyTask {/***定时任务,每5秒执行一次*/@Scheduled(cron="0/5 * * * * ?")public void executeTask(){log.info("定时任务开始执行:{}",new Date());}
}

运行结果:每5秒执行一次:

3c474c9fba34403cbe8961020532ee0f.png
 

b1e5c92a80b757e5a176018b5609ef9e.gifb1e5c92a80b757e5a176018b5609ef9e.gifb1e5c92a80b757e5a176018b5609ef9e.gif总结:

综上所述,Spring Task是Spring框架中非常强大且灵活的任务调度工具。它提供了简单易用的注解和配置方式,支持基于cron表达式的定时任务调度和异步任务处理。通过合理配置和使用Spring Task,开发者可以轻松地实现各种复杂的定时任务需求。

aed057e1bed2414188b593c3a4300019.gif

                        
参考链接:https://blog.csdn.net/weixin_64178283/article/details/142874340

 

相关文章:

Spring Task详细讲解

✨Spring Task简介 Spring Task 是 Spring 提供的轻量级定时任务工具&#xff0c;也就意味着不需要再添加第三方依赖了&#xff0c;相比其他第三方类库更加方便易用。可以按照约定的时间自动执行某个代码逻辑。 使用场景&#xff1a; 信用卡每月还款提醒银行贷款每月还款提醒…...

C++初阶 --- 类和对象(1)

类和对象&#xff08;1&#xff09; 一、类的相关内容1.访问限定符2.class关键字与struct关键字的区别3.类域 二、this指针三、成员函数存放在哪里&#xff1f;1. 函数的存放位置2. 练习题 一、类的相关内容 1.访问限定符 &#xff08;1&#xff09;C⼀种实现封装的⽅式&…...

《TCP/IP网络编程》学习笔记 | Chapter 7:优雅地断开套接字连接

《TCP/IP网络编程》学习笔记 | Chapter 7&#xff1a;优雅地断开套接字连接 《TCP/IP网络编程》学习笔记 | Chapter 7&#xff1a;优雅地断开套接字连接基于 TCP 的半关闭单方面断开连接带来的问题套接字和流针对优雅断开的 shutdown 函数为何需要半关闭&#xff1f;基于半关闭…...

Anaconda 和 conda 是什么关系?就像 pip 和 python 一样吗

Anaconda 和 conda是 Anaconda Distribution 还是 Miniconda Anaconda 和 conda Anaconda 和 conda 之间的关系有点类似于 pip 和 Python&#xff0c;但又有所不同。 Anaconda 是一个数据科学和机器学习的发行版&#xff0c;它包含了 Python、conda 以及许多预装的库和工具&am…...

「数据治理」核心专业术语解释!

​数据治理就是指在一定的组织范围内&#xff0c;依托制度法规、标准规范、应用实践和支撑技术对数据进行全生命周期的数据确权、质量管理、安全控制、隐私保护、开放共享、交易流通和分析处理。数据治理的目标是为了提高数据的可用性、安全性、流通性&#xff0c;激活数据资源…...

Mac Nginx 前端打包部署

安装homebrew /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 安装Nginx brew install nginx nginx相关命令 nginx启动命令&#xff1a;nginx nginx -s reload #重新加载配置 nginx -s reopen #重启 nginx -s stop #…...

乳腺癌诊断分析——基于聚类分析实现

一、研究背景 乳腺癌属于恶性肿瘤&#xff0c;在早期发现后需要及早将病变组织切除&#xff0c;而且术后还要化疗和放射等辅助治疗&#xff0c;能够抑制癌细胞的扩散和增长。 二、研究目的 研究乳腺癌病人的患病特征通过聚类分析方法对特征进行分类通过上述聚类结果对乳腺诊…...

Ubuntu 22.04 安装配置opencv

​ OpenCV下载:https://opencv.org/releases/ ​编译与安装 安装cmake OpenCV需要使用cmake进行编译 sudo apt-get install cmake安装依赖 sudo apt-get install build-essential pkg-config libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev lib…...

【软考】系统架构设计师-计算机系统基础(3):嵌入式系统

嵌入式系统&#xff1a;嵌入式处理器、相关支撑硬件、嵌入式OS、支撑软件以及应用软件 嵌入式系统特征&#xff1a;专用性强、技术融合、软硬一体软件为主、通用计算机资源少,... 分层&#xff08;5层&#xff09;&#xff1a;硬件层 → 抽象层 → 操作系统层 → 中间件层 →…...

实测运行容器化Tomcat服务器

文章目录 前言一、拉取Tomcat 9.0镜像二、运行容器化Tomcat服务器三、访问Tomcat官网首页测试 总结 前言 运行容器化Tomcat服务器&#xff0c;首先确保正确安装docker&#xff0c;并且已启动运行&#xff0c;具体安装docker方法见笔者前面的博文《OpenEuler 下 Docker 安装、配…...

致敬苹果的国产手机,只会失去更多市场,iPhone一骑绝尘!

近期诸多国产手机品牌纷纷发布旗舰手机&#xff0c;随着这些旗舰手机的发布&#xff0c;可以看出他们在进一步致敬苹果--实质就是模仿苹果的设计&#xff0c;如此做的结果恐怕是得不偿失&#xff0c;将导致国产手机损失更多市场。 致敬苹果最为直接的当属手机外壳了&#xff0c…...

《MYSQL45讲》kill不掉的线程

kill query 线程id :终止这个线程正在执行的语句 kill connection 线程id :关闭这个线程的连接&#xff0c;也会先停止这个线程正在执行的语句。这个connection可以缺省。 本文讨论的情况是&#xff1a;使用了kill命令&#xff0c;却没有断开连接&#xff0c;show processli…...

单体架构 IM 系统之 Server 节点状态化分析

基于 http 短轮询模式的单体架构的 IM 系统见下图&#xff0c;即客户端通过 http 周期性地轮询访问 server 实现消息的即时通讯&#xff0c;也就是我们前面提到的 “信箱模型”。“信箱模型” 虽然实现非常容易&#xff0c;但是消息的实时性不高。 我们在上一篇文章&#xff08…...

java xml 文本解析

示例文本 <Message><MessageName>time_request</MessageName><Timestamp>20220217165432906359</Timestamp><Body><EQPID>CMMAB01-DTP01</EQPID></Body> </Message>示例代码 import org.w3c.dom.Document; impo…...

Docker占用空间太大磁盘空间不足清理妙招

docker占用空间太大了&#xff0c;磁盘空间不足&#xff0c;清理3妙招 清除所有已停止的容器&#xff08;container&#xff09;、未被任何容器所使用的卷&#xff08;volume&#xff09;、未被任何容器所关联的网络&#xff08;network&#xff09;、所有悬空镜像&#xff08…...

编程之路,从0开始:字符函数和字符串函数

Hello大家好&#xff01;很高兴我们又见面了&#xff01; 给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 目录 1、字符分类函数 2、字符转换函数 3、字符串函数 1、 strcpy 2、 strcat 3、 strcmp 4、strlen(s) 5、strstr(s1, s2) 6、 strtok(s1, s2…...

化工防爆巡检机器人:在挑战中成长,为化工安全保驾护航

随着全球能源需求的不断攀升&#xff0c;化工行业的安全性与高效性愈发受到关注。化工设施规模巨大&#xff0c;而且其中多数存在高风险因素&#xff0c;像是易燃易爆化学物质、高温环境、有毒有害物质以及高压设备等。仅2023年&#xff0c;国内危化品事故就多达652起&#xff…...

音频采样数据格式

音频信号在模拟到数字转换时&#xff0c;会涉及到多个关键参数&#xff0c;如采样率、位深度、通道数等。下面是常见的音频采样数据格式及其相关概念&#xff1a; 1. 采样率 (Sample Rate) 采样率指的是每秒钟对音频信号进行采样的次数&#xff0c;单位为赫兹 (Hz)。常见的值…...

【pytorch】常用强化学习算法实现(持续更新)

持续更新常用的强化学习算法&#xff0c;采用单python文件实现&#xff0c;简单易读 2024.11.09 更新&#xff1a;PPO(GAE); SAC2024.11.12 更新&#xff1a;OptionCritic(PPOC) "PPO" import copy import time import torch import numpy as np import torch.nn as …...

DAY59||并查集理论基础 |寻找存在的路径

并查集理论基础 并查集主要有两个功能&#xff1a; 将两个元素添加到一个集合中。判断两个元素在不在同一个集合 代码模板 int n 1005; // n根据题目中节点数量而定&#xff0c;一般比节点数量大一点就好 vector<int> father vector<int> (n, 0); // C里的一…...

ISTA 3B-2013 全解析|零担货物 (LTL) 综合模拟运输测试标准(CSDN 完整版)前言

前言 ISTA 3B-2013 是 ISTA 3 系列高级综合模拟测试&#xff0c;专门针对零担货物运输&#xff08;LTL&#xff09; 的包装件。 零担运输的特点是多货混装、多次中转、人工 / 叉车交叉搬运、环境复杂&#xff0c;因此 3B 是工业、设备、家电、汽配、大型包装最贴近真实物流的测…...

从入门到发烧:2026 Linux 必装 13 款播放器(VLC/MPV/Kodi 全覆盖)

Linux视频播放器选择多样&#xff0c;如榛名、MPlayer、VLC等&#xff0c;功能强大、支持多格式&#xff0c;满足各类用户需求 一、榛名视频播放器 榛名视频播放器是一款基于Qt的开源视频播放器&#xff0c;提供了许多基本功能。其特点包括支持Youtube-dl、控制播放速度、丰富…...

AI时代的“新文盲”:不会用提示词的技术人正在掉队

2026年的软件测试领域&#xff0c;正在经历一场前所未有的认知分化。这种分化不再是手工测试与自动化测试的界限&#xff0c;也不是代码能力的高低之别&#xff0c;而是在AI辅助工具全面渗透到测试工作流的今天&#xff0c;能否通过“提示词”&#xff08;Prompt&#xff09;精…...

Monk AI小样本分类实战:用几十张图快速构建可用AI模型

1. 项目概述&#xff1a;用 Monk AI 做分类&#xff0c;但只喂它一小块数据——这到底在解决什么问题&#xff1f;“Classification Using Monk AI by Using a Slice of the Dataset”这个标题乍看平平无奇&#xff0c;甚至有点拗口&#xff0c;但如果你在工业质检、医疗影像初…...

Go语言Web应用部署与运维实战

Go语言Web应用部署与运维实战 引言 部署和运维是Web应用生命周期的重要环节。本文将深入探讨Go语言Web应用的部署策略和运维最佳实践&#xff0c;帮助开发者构建稳定可靠的生产环境。 一、部署前准备 1.1 编译优化 // main.go package mainimport "github.com/gin-gonic/g…...

在 Node.js 后端服务中配置 Taotoken 作为大模型调用网关

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在 Node.js 后端服务中配置 Taotoken 作为大模型调用网关 将大模型能力集成到后端服务是现代应用开发的常见需求。通过 Taotoken 平…...

数据库锁机制:表锁、行锁(Oracle 默认)、共享锁、排他锁、乐观锁、悲观锁、死锁、Hive 中的锁

数据库锁机制是控制并发访问数据的关键技术。本文系统介绍了锁的概念、分类和应用场景&#xff1a;1&#xff09;锁通过限制并发访问确保数据一致性&#xff0c;类比厕所门锁机制&#xff1b;2&#xff09;按粒度分为表锁&#xff08;适合批量操作&#xff09;、行锁&#xff0…...

SMUDebugTool终极指南:深度掌握AMD Ryzen硬件调试与性能优化

SMUDebugTool终极指南&#xff1a;深度掌握AMD Ryzen硬件调试与性能优化 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: http…...

Veo 2K/4K生成失败率下降92%的核心设置(2024实测版Veo 2.3.1隐藏参数曝光)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Veo 2K/4K生成失败率下降92%的底层归因分析 Veo 视频生成模型在 2K/4K 高分辨率输出场景中&#xff0c;近期实测失败率由历史均值 18.7% 降至 1.5%&#xff0c;降幅达 92%。这一跃迁并非单一模块优化结果&…...

同样做App开发,两种技术栈到底适合谁?看完直接选不纠结

原生开发栈的适配人群前端苹果安卓原生开发后端Java&#xff0c;是互联网行业里沿用多年的经典组合。很多从计算机相关专业科班毕业的开发者&#xff0c;最早接触的就是这套路线。大学课程里会教Java基础&#xff0c;会分方向讲Android和iOS的原生开发知识&#xff0c;毕业之后…...