SpringBoot中的定时任务

news/2025/2/27 22:55:15/文章来源:https://www.cnblogs.com/Abner-rudolf/p/18742240

定时任务

1. 定时任务概述

任务调度是指系统为了自动完成特定任务,在约定的特定时刻去执行任务的过程。有了任务调度即可解放更多的人力,而是由系统自动去执行任务。

常用业务场景案例:

  • 某电商系统需要在每天上午 10 点,下午 3 点,晚上 8 点发放一批优惠券。
  • 某银行系统需要在信用卡到期还款日的前三天进行短信提醒。
  • 某财务系统需要在每天凌晨 0:10 结算前一天的财务数据,统计汇总。
  • 12306 会根据车次的不同,设置某几个时间点进行分批放票。

如何实现任务调度?

  • 多线程方式,结合 sleep
  • JDK 提供的 API,例如:Timer、ScheduledExecutor
  • 框架,例如 Quartz,它是一个功能强大的任务调度框架,可以满足更多更复杂的调度需求,还有一些其他的,比如:XXL-JOB,DolphinScheduler
  • SpringTask

2. cron 表达式

在我们使用调度任务技术的时候,特别是调度框架,里面都支持使用日历的方式来设置任务制定的时间、频率等,通常情况下都会使用 cron 表达式来表达。

cron 表达式是一个字符串,用来设置定时规则,由七部分组成,每部分中间用空格隔开,每部分的含义如下表所示:

组成部分 含义 取值范围
第一部分 Seconds(秒) 0-59
第二部分 Minutes(分) 0-59
第三部分 Hours(时) 0 - 23
第四部分 Day-of-Month(日) 1 - 31日
第五部分 Month(月) 0-11 或 JAN-DEC
第六部分 Day-of-Week(星期) 1 - 7(1 表示星期日)或 SUN - SAT
第七部分 Year(年)可选 1970 - 2099

另外,cron 表达式还可以包含一些特殊符号来设置更加灵活的定时规则,如下表所示:

符号 含义
? 表示不确定的值。为了避免两个子表达式冲突,需要将另外一个的值设为 "?"
* 代表所有可能的值
, 设置多个值
- 设置取值范围
/ 设置频率或间隔
L 用于每月,或每周,表示每月的最后一天,或每个月的最后星期几
W 表示离给定日期最近的工作日
# 表示该月第几个周 X

例子:

cron表达式 含义
*/5 * * * * ? 每隔 5 秒运行一次任务
0 0 23 * * ? 每天 23 点运行一次任务
0 0 1 1 * ? 每月 1 号凌晨 1 点运行一次任务
0 0 23 L * ? 每月最后一天 23 点运行一次任务
0 26,29,33 * * * ? 在 26 分、29 分、33 分运行一次任务
0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时运行一次任务
0 15 10 ? * 6#3 每月的第三个星期五上午 10:15 运行一次任务

3. SpringTask 入门

  1. 导入 maven 依赖 spring-context

    目前项目中只要导入了 springboot 相关依赖会自动导入,这一步无需操作

  2. 自定义定时任务类

    @Component
    @Slf4j
    public class MyTask {@Scheduled(cron = "0/5 * * * * ?")public void executeTask() { log.info("{}", LocalDateTime.now()); }
    }
    
  3. 启动类添加注解 @EnableScheduling

  4. 启动项目,测试效果


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

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

相关文章

使用 DeepSeek R1 和 Ollama 开发 RAG 系统

1.概述 掌握如何借助 DeepSeek R1 与 Ollama 搭建检索增强生成(RAG)系统。本文将通过代码示例,为你提供详尽的分步指南、设置说明,分享打造智能 AI 应用的最佳实践。 2.内容 2.1 为什么选择DeepSeek R1? 在这篇文章中,我们将探究性能上可与 OpenAI 的 o1 相媲美、但成本却…

[NCTF 2022]qrssssssssqrssssssss_revenge WP

[NCTF 2022]qrssssssss&qrssssssss_revenge WP[NCTF 2022]qrssssssss&qrssssssss_revenge WP 本来最近是想练习写 python 脚本的,无意之中刷到了这道题,看到是关于二维码的,于是正好研究一下。 看了官方 WP有些概念没怎么懂,又去借鉴了别人的二维码学习笔记,不过…

昆明理工大学25年材料工程考研预计调剂158人

--材测材料物理与化学材料学材料表征与分析材料工程F001现代材料测试技术F002材料成型技术基础864材料科学基础

7.4.1 Inception 块

白色的\(1\times 1\)卷积层是用来降低通道数的,蓝色的卷积层是用来学习特征的 大致解释一下这些数字是怎么分配的。现在我们的通道数是\(192\),于是我们假设最后输出的通道数是\(256\);考虑这些通道如何分配:我们知道\(3\times 3\)的卷积层性质很好(参数不算太多,学习能力…

Windows安装ollama运行deep seek R1模型+Page Assist浏览器插件本地使用

在Windows系统上安装Ollama并运行DeepSeek R1模型,同时结合Page Assist浏览器插件实现本地使用,可以按照以下步骤操作: 一、安装Ollama 下载Ollama: 访问Ollama官方网站,下载适用于Windows的版本。安装路径默认在c盘创建符号链接 原路径:C:\Users\18368\.ollama目标路径:…

上海海洋大学软件开发与创新课程设计作业

我给上学期其他同学的大作业添加了一些功能,已有的功能只有用户注册并填写账号密码,然后点击登录按钮成功登录 现在添加的新功能如下: 1,添加了一个真正可以选课的页面,添加了一些课程选项 2,可以存储用户选课的历史和方案 3,添加了一个管理员页面用于查看用户账号密码以…

Qwen2.5-0.5B siglip 预训练 / 微调实验

前言视频 | 仓库跟着教程做的,记录学习过程。 环境双卡 3090 24G CUDA 12.2 transformers 4.49概述 通过在 Qwen2.5-0.5B 和 siglip 之间训练一个中间层构造 VLM。作者提到首次微调时,只冻结了视觉模型的参数,导致阶梯状的 loss 曲线,即发生过拟合。应冻结文本和视觉模型的…

2025.2.27(Java的输出换行)

如图输出println,这个ln相当于输出完后自动换一次行。如图输出print,去掉ln不换行。

优化职工信息系统文件读写错误

该系统取自于大一时期的一个同班同学的期末大作业,该职工信息系统分别实现了职工信息的增删改查,以及计算职工的总工资和平均工资等功能。但是在编写了该系统之后,出现了一些问题,其中一个文件读写的问题我觉得需要进行改进,这个代码不能自己创建文本文档在指定的文件夹,…

PL端DDR4的MIG IP核配置及example design分析(个人记录)

第一种配置方法如下。按最高2666MHz配置,这边输入的参考时钟看个人板卡情况,我这边输入是200MHz。第二种配置方法如下。按2400MHz配置(需要换芯片型号),这边输入的参考时钟看个人板卡情况,我这边输入是200MHz。这边是输入时钟设置及输出时钟设置。我这边输入是差分时钟,…

Linux上部署deepseek-r1:7b模型

通过ollama在debian上安装部署deepseek-r1:7b模型。一、安装ollama框架 访问 ollama 官网,点击下载,选择 Linux,复制安装命令执行即可。二、下载并运行模型 选择 deepseek:7b 模型,复制安装命令执行即可。 (这里的模型参数大小,可根据自己的显存大小选择,可简单安装 0.5b…

LVI_SAM虚拟机安装复现(二)

0. 前言 前一篇文章里面,已经完成了 Ubuntu 18.04 和 ROS Melodic 的安装。 还没有安装好的读者,可以回去看这一篇文章。 前情概要: LVI_SAM虚拟机安装复现(一) 本文主要记录了GTSAM源码编译安装过程中经历的坑 警告:并非从零开始零基础教你安装 GTSAM 哦 GTSAM是一个开源…