Spring Boot 定时任务:轻松实现任务自动化

在现代应用开发中,定时任务是一个常见的需求。比如,我们可能需要定时清理过期数据、定时发送邮件通知等。

操作流程

开启定时任务注解

在启动类添加注解@EnableScheduling

设置时间(固定时间间隔)

使用 @Scheduled 注解创建定时任务十分简单,只需几行代码就能完成。@Scheduled 除了支持灵活的 cron 参数表达式,还支持简单的延时操作,如 fixedDelay(任务执行结束后延迟指定毫秒数再执行下一次)、fixedRate(固定频率,每隔指定毫秒数执行一次)。

@EnableScheduling
@SpringBootApplication
public class DingshiApplication {public static void main(String[] args) {SpringApplication.run(DingshiApplication.class, args);}//下面的两个方法在第一次启动项目的时候会执行一次//    半小时提醒一次@Scheduled(fixedRate = 30*60*1000)public void playSth1(){System.out.println("任务一"+ DateFormat.getDateInstance().format(new Date()));}//    四小时执行一次@Scheduled(fixedRate = 4*60*60*1000)public void playSth2(){System.out.println("任务二"+ DateFormat.getDateInstance().format(new Date()));}
}

cron表达式

Cron 表达式是一种用于指定定时任务执行时间的字符串表达式。它由 6 个字段组成,分别表示秒、分钟、小时、天数、月份和星期几。每个字段都可以使用特定的符号来指定时间范围或间隔。

Cron - 在线Cron表达式生成器

通用符号:, * - /
  • , :表示列出枚举值。例如:在 分钟 域使用5,20,表示在时间的分钟数为5,20时触发事件。
  • - :表示范围:例如在 分钟 域使用5-20,表示在时间的分钟数为5到20时每分钟都触发事件
  • * :表示匹配该域的任意值。假如在 分钟 域使用*,表示时间分钟数不做限制,分分钟都出发事件
  • / :表示起始时间开始触发,然后每个固定时间触发一次。例如在 分钟 域使用5/20,表示事件的分钟数为5时触发一次,后隔20分钟即25,45再分别触发一次。

spring中只可以使用6位。

0 0 2 1 * ?:每月一号凌晨两点触发。

0 10,44 14 ? 3 WED :3月的每个星期3下午两点10分和44分时触发

专有符号:
  • ?:只能用在DayofMonth和DayofWeek两个域,由于DayOfMonth和DayOfWeek互斥,需对其一进行设置。
  • L:表示最后,只能出现在DayofWeek和DayofMonth域。如果在DayofWeek域使用5L,意味着在最后一个星期四触发。
  • W:表示有效工作日(周一到周五),只能出现在DayofMoneth域,系统将在离指定日期的最近的有效工作日触发事件。
  • #:用于确定每个月第几个星期几,只能出现在DayofWeek域。例如在4#2,表示某月的第二个星期三
  • C:只能用在DayofMonth和DayofWeek两个域,需要关联日历,如果没关联可以忽略
转有符号:
  • 专有符号中除了?外,再Spring定时任务中都不支持。

spring异步多线程实现

@Async 是 Spring 框架中的一个任务异步执行注解,在定时任务中主要有以下作用:

  • 避免任务阻塞:Spring 中添加了 @Scheduled 注解的定时任务默认都在一个线程中执行,这意味着当某个定时任务执行时间较长时,其他定时任务会一直等待,出现排队现象。而使用 @Async 注解后,被注解的定时任务方法会使用新线程异步执行,避免了任务之间的相互阻塞。例如,有任务 A 需要长时间处理数据,任务 B 是定时发送简单通知,如果没有 @Async,任务 B 需等任务 A 完成才能执行;添加 @Async 后,任务 B 可在新线程中异步执行,不被任务 A 阻塞。
  • 提高执行效率:在存在多个定时任务的场景下,通过 @Async 让任务在不同线程中并行执行,充分利用多核 CPU 的性能,提高整体执行效率。比如,一个系统中有定时数据备份任务、定时日志清理任务和定时数据统计任务,使用 @Async 可使这些任务同时进行,而不是依次排队执行。
  • 增强系统稳定性:当某个定时任务因异常挂死时,若没有 @Async,会影响后续定时任务的执行;使用 @Async 后,每个任务在独立线程中运行,某个任务的异常不会导致其他任务无法执行,增强了系统的稳定性和健壮性。

不过需要注意,使用 @Async 时,Spring Boot 默认执行器线程池大小为 100 ,开发者也可根据实际需求自定义线程池配置,以更好地管理异步任务的执行。

样例展示

@EnableAsync
@EnableScheduling
@SpringBootApplication
public class DingshiApplication {public static void main(String[] args) {SpringApplication.run(DingshiApplication.class, args);}//下面的两个方法在第一次启动项目的时候会执行一次@Async@Scheduled(fixedRate = 5*1000)public void playSth1(){System.out.println("任务1线程:"+Thread.currentThread().getName());System.out.println("任务一"+ DateFormat.getDateInstance().format(new Date()));}@Async@Scheduled(cron = "0 0 2 1 * ? ")@Scheduled(fixedRate = 10*1000)public void playSth2(){System.out.println("任务2线程:"+Thread.currentThread().getName());System.out.println("任务二"+ DateFormat.getDateInstance().format(new Date()));}
}

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

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

相关文章

七星棋牌全开源修复版源码解析:6端兼容,200种玩法全面支持

本篇文章将详细讲解 七星棋牌修复版源码 的 技术架构、功能实现、二次开发思路、搭建教程 等内容,助您快速掌握该棋牌系统的开发技巧。 1. 七星棋牌源码概述 七星棋牌修复版源码是一款高度自由的 开源棋牌项目,该版本修复了原版中的多个 系统漏洞&#…

【Rust中级教程】1.12. 生命周期(进阶) Pt.2:生命周期变型、协变、不变、逆变

喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 这篇文章在Rust初级教程的基础上对生命周期这一概念进行了补充,建议先看【Rust自…

Vue 项目登录的基本流程

Vue 用户登录的基本流程包括以下6个步骤&#xff1a; 步骤&#xff1a; 1. 创建登录表单 在前端&#xff0c;首先要创建一个登录表单&#xff0c;用户输入账号&#xff08;用户名、邮箱、手机号等&#xff09;和密码。 示例&#xff1a;Login.vue <template><div…

【算法】回溯算法

回溯算法 什么是回溯 人生无时不在选择。在选择的路口&#xff0c;你该如何抉择 ..... 回溯&#xff1a; 是一种选优搜索法&#xff0c;又称为试探法&#xff0c;按选优条件向前搜索&#xff0c;以达到目标。但当探索到某一步时&#xff0c;发现原先选择并不优或达不到目标&am…

SpringAI系列 - RAG篇(三) - ETL

目录 一、引言二、组件说明三、集成示例一、引言 接下来我们介绍ETL框架,该框架对应我们之前提到的阶段1:ETL,主要负责知识的提取和管理。ETL 框架是检索增强生成(RAG)数据处理的核心,其将原始数据源转换为结构化向量并进行存储,确保数据以最佳格式供 AI 模型检索。 …

2025 docker可视化管理面板DPanel的安装

1.什么是 DPanel &#xff1f; DPanel 是一款 Docker 可视化管理面板&#xff0c;旨在简化 Docker 容器、镜像和文件的管理。它提供了一系列功能&#xff0c;使用户能够更轻松地管理和部署 Docker 环境。 软件特点&#xff1a; 可视化管理&#xff1a;提供直观的用户界面&#…

基于Python的深度学习音乐推荐系统(有配套论文)

音乐推荐系统 提供实时音乐推荐功能&#xff0c;根据用户行为和偏好动态调整推荐内容 Python、Django、深度学习、卷积神经网络 、算法 数据库&#xff1a;MySQL 系统包含角色&#xff1a;管理员、用户 管理员功能&#xff1a;用户管理、系统设置、音乐管理、音乐推荐管理、系…

微信小程序---计划时钟设计与实现

微信小程序-计划时钟已上线,欢迎各位小伙伴的测试和使用~(微信小程序搜计划时钟即可使用) 在这篇博客中,我们将探讨如何在微信小程序中设计和实现一个任务管理功能,该功能允许用户添加、删除和查看任务。任务管理系统的核心是基于日期和时间的任务管理,可以设置任务的开…

RPA-实例(UiPath )

UiPath 是一个流行的机器人流程自动化(RPA)工具,用于自动化重复性任务。以下是一个简单的实例,展示如何使用 UiPath 自动化一个常见的任务:从 Excel 文件中读取数据并将其输入到网页表单中。 实例:从 Excel 读取数据并自动填写网页表单 步骤 1:准备工作 安装 UiPath S…

华为固态电池引发的思索

华为固态电池真牛&#xff01; 超长续航&#xff1a;单次充电即可行驶3000公里 极速充电&#xff1a;五分钟内充满80% 极致安全&#xff1a;不可燃、不漏液 长寿命设计&#xff1a;循环寿命达10000次以上 如上是华为电池展示的优势项&#xff0c;每一条都让我们心动不已。…

算法分析—— 《归并排序》

《排序数组》 题目描述&#xff1a; 给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 你必须在 不使用任何内置函数 的情况下解决问题&#xff0c;时间复杂度为 O(nlog(n))&#xff0c;并且空间复杂度尽可能小。 示例 1&#xff1a; 输入&#xff1a;nums [5,2…

UEFI Spec 学习笔记---11 - Protocols — UEFI Driver Model(1)

11.UEFI Driver Model 遵循 UEFI model 的 EFI driver 是不允许去遍历所有的 controller 来识别需要安装到哪个 controller 上的&#xff0c;而是通过 EFI_BOOT_SERVICES 的 ConnectController 和调用 Binding Driver 来实现&#xff1b; 具体实现如下&#xff1a; CoreConne…

10G EPON光模块

一、10G EPON对称光模块 工作模式&#xff1a;上行突发接收、下行连续发射。 工作原理&#xff1a;当需要发送信号时&#xff0c;系统信号通过光模块的电接口把信号传送到驱动芯片&#xff0c;芯片处理后&#xff0c;驱动激光器发出调制光信号&#xff0c;经光纤发到远端&…

整合SaToken 实现登录功能

整合SaToken 实现登录功能 1.整合redis 1.1添加相关依赖 // 省略...<!-- Redis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- Redi…

Vue 项目中逐步引入 TypeScript 的类型检查

在现有的 Vue 项目中逐步引入 TypeScript 的类型检查 本文源于一道面试题&#xff1a;注&#xff1a;两种问法一个意思哈&#xff01;&#xff01; 问题一&#xff1a;“ 老项目Js写的&#xff0c;如何轻量方式享受 ts 类型&#xff1f;” 问题二&#xff1a;“如何 在现有的 …

python后端调用Deep Seek API

python后端调用Deep Seek API 需要依次下载 ●Ollama ●Deepseek R1 LLM模型 ●嵌入模型nomic-embed-text / bge-m3 ●AnythingLLM 参考教程&#xff1a; Deepseek R1打造本地化RAG知识库:安装部署使用详细教程 手把手教你&#xff1a;deepseek R1基于 AnythingLLM API 调用本地…

本地部署MindSearch(开源 AI 搜索引擎框架),然后上传到 hugging face的Spaces——L2G6

部署MindSearch到 hugging face Spaces上——L2G6 任务1 在 官方的MindSearch页面 复制Spaces应用到自己的Spaces下&#xff0c;Space 名称中需要包含 MindSearch 关键词&#xff0c;请在必要的步骤以及成功的对话测试结果当中 实现过程如下&#xff1a; 2.1 MindSearch 简…

matlab下载安装图文教程

【matlab介绍】 MATLAB是一款由美国MathWorks公司开发的专业计算软件&#xff0c;主要应用于数值计算、可视化程序设计、交互式程序设计等高科技计算环境。以下是关于MATLAB的简要介绍&#xff1a; MATLAB是MATrix LABoratory&#xff08;矩阵实验室&#xff09;的缩写&#…

捷米特 JM - RTU - TCP 网关应用 F - net 协议转 Modbus TCP 实现电脑控制流量计

一、项目背景 在某工业生产园区的供水系统中&#xff0c;为了精确监测和控制各个生产环节的用水流量&#xff0c;需要对分布在不同区域的多个流量计进行集中管理。这些流量计原本采用 F - net 协议进行数据传输&#xff0c;但园区的监控系统基于 Modbus TCP 协议进行数据交互&…

4.1 Hugging Face Datasets实战:构建企业级数据流水线

Hugging Face Datasets实战:构建企业级数据流水线 一、Datasets库核心优势 1.1 企业级数据处理需求全景 # 支持的数据格式示例 data_formats = {"结构化数据": ["CSV", "Parquet", "SQL"]