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

Spring Task快速上手

一. 介绍

Spring Task 是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑,无需依赖额外组件(如 Quartz),配置简单、使用便捷,适合处理周期性执行的任务(如定时备份数据、定时发送报表、定时清理缓存等)。

1. 核心特点:

  1. 轻量级:属于 Spring 框架自带模块,无需额外引入依赖(Spring 3.0+ 已内置)。
  2. 易用性:通过注解(如 @Scheduled)即可快速配置定时任务,无需复杂 XML 配置。
  3. 支持多种调度策略:可按固定速率、固定延迟、Cron 表达式等方式触发任务。
  4. 与 Spring 生态无缝集成:能直接注入 Spring 容器中的 Bean,方便使用业务逻辑组件。

2.应用场景:

  1. 每日凌晨凌晨 2 点自动备份数据库
  2. 每小时清理过期缓存数据
  3. 每天 8 点推送用户消息通知
  4. 每周一生成上周销售报表
  5. 每 10 分钟检查并提醒即将超时的订单
  6. 每月 1 日删除 3 个月前的无效订单
  7. 每 5 分钟监控服务器运行状态
  8. 每天凌晨预热热门商品缓存数据

二. corn表达式

要使用Spring Task,必须学会corn表达式。

Cron 表达式是用于定义定时任务执行时间的字符串格式,由 6 或 7 个空格分隔的字段组成,分别代表不同的时间单位,基本格式如下(从左到右):

秒 分 时 日 月 周 [年](年是可选字段,通常省略)

常用特殊字符含义

  • *:匹配所有值(如 “分” 字段为 * 表示每分钟)
  • ?:仅用于 “日” 和 “周”,表示不指定具体值(避免两者冲突)
  • /:表示递增(如 0/5 表示从 0 开始,每 5 单位执行一次)
  • -:表示范围(如 10-12 表示 10 到 12)
  • ,:表示多个值(如 MON,WED,FRI 表示周一、三、五)

常见示例

  1. 0 0 2 * * ? → 每天凌晨 2 点执行
  2. 0 0 8,18 * * ? → 每天 8 点和 18 点执行
  3. 0 0/30 9-17 * * ? → 工作日 9 点到 17 点,每 30 分钟执行
  4. 0 0 12 ? * WED → 每周三中午 12 点执行
  5. 0 0 1 1 * ? → 每月 1 日凌晨 1 点执行
  6. 0/5 * * * * ? → 每 5 秒执行一次
  7. 0 30 10 ? * MON-FRI → 工作日上午 10 点 30 分执行

三. 使用步骤

1. 导入maven坐标

Spring Task 是 Spring Framework 核心模块的一部分,不需要单独引入额外的 Maven 坐标。它包含在 Spring 核心依赖中,只要项目中引入了 Spring Context 相关依赖(几乎所有 Spring 项目都会包含),就可以直接使用 Spring Task 的功能。

最常见的引入方式是通过 Spring Boot starter 间接包含,例如:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><!-- 版本号通常由 Spring Boot 父工程统一管理 -->
</dependency>

2. 在启动类上添加注解@EnableScheduling开启任务调度

@SpringBootApplication
@Slf4j
@EnableScheduling//开启任务调度
public class SkyApplication {public static void main(String[] args) {SpringApplication.run(SkyApplication.class, args);log.info("server started");}
}

3. 自定义定时任务类

这里写一个简单的例子:

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

注解:

  • @Component:将该类注册到 Spring 容器中,使其成为被管理的 Bean。
  • @Slf4j:Lombok 提供的注解,自动生成日志对象 log,用于打印日志。
  • @Scheduled(cron = "0/5 * * * * ?"):核心注解,通过 Cron 表达式 0/5 * * * * ? 指定任务执行规则

方法task:任务执行的具体逻辑,可以将这里替换为需要定时处理的业务

http://www.xdnf.cn/news/19251.html

相关文章:

  • Maven学习笔记01
  • 【stm32】对射式红外传感器计次以及旋转编码器计次
  • SpringBoot 自研运行时 SQL 调用树,3 分钟定位慢 SQL!
  • 用产品经理的思维,重构AI时代的增长Playbook
  • 企业数据湖:从混沌到秩序的分层设计与治理策略
  • 11.1.5 实现文件删除,共享和共享下载排行榜
  • 分布式测试平台ITP:让自动化测试更高效、更稳定
  • SW - 用装配图的方式组合多个子零件然后转换成为零件,可维护性好
  • 组件通信终极指南:从Props Drilling到Context API
  • react-virtualized React 应用中高效渲染大型列表和表格数据的库
  • 扣子(coze)实践指南进阶篇——创建工作流,并将工作流接入智能体
  • 2025年8月个人工作生活总结
  • [Windows] 某音下载工具——自用
  • Selenium 等待机制:编写稳定可靠的自动化脚本
  • Kubernetes中kubeadm、kubectl、kubelet的区别与作用
  • 动态规划入门(三):一些经典动态规划模型
  • arnold图像加密(猫脸变换)
  • 一个从7zip中分离出来的高压缩比文本压缩工具ppmd
  • 文件系统深度解析:从核心概念到代码实践
  • 【MLLM】多模态理解Ovis2.5模型和训练流程(更新中)
  • 手写MyBatis第43弹:插件拦截原理与四大可拦截对象详解
  • Shell脚本编程入门:从基础语法到流程控制
  • USB4 vs USB3.0:一场接口技术的革命性飞跃
  • 鸿蒙ArkTS 核心篇-14-条件表达式(三目运算符)
  • 如何提高微型导轨的生产效率?
  • 使用 Visio Viewer 查看 Visio 绘图文件
  • 语义分割一站式到底怎么玩?
  • 中级统计师-统计实务-第三章 国民经济核算
  • 智能装备如何与软件结合?
  • MySQL独占间隙锁为什么会互相兼容?