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

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.dtcms.com/a/359344.html

相关文章:

  • 【多模态】使用LLM生成html图表
  • 【 复习SpringBoot 核心内容 | 配置优先级、Bean 管理与底层原理(起步依赖 + 自动配置) 】
  • 堆排序:高效稳定的大数据排序法
  • Kubernetes 服务发现与健康检查详解
  • 解锁GPU计算潜能:深入浅出CUDA架构与编程模型
  • ESP32学习笔记_Peripherals(5)——SPI主机通信
  • Asible——将文件部署到受管主机和管理复杂的Play和Playbook
  • 局域网中使用Nginx部署https前端和后端
  • Idea启动错误-java.lang.OutOfMemoryError:内存不足错误。
  • Polkadot - ELVES
  • 鸿蒙搭配前端开发:应用端与WEB端交互
  • SCARA 机器人工具标定方法
  • 【算法笔记】算法归纳整理
  • 从零开始的python学习——语句
  • 晶晨线刷工具下载及易错点说明:生成工作流程XML失败
  • 【CVTE】C++开发 (提前批一面)
  • C++Primer笔记——第七章:类(上)
  • Spring/Spring MVC/iBATIS 应用 HTTP 到 HTTPS 迁移技术方案
  • C语言学习笔记(自取)
  • 【大前端】React配置配置 开发(development)、生产(production)、测试(test)环境
  • C语言强化训练(1)
  • VSCode中使用Markdown
  • 学习笔记:MySQL(day1)
  • 机器学习基础-day01-机器学习介绍
  • 微信小程序开发教程(六)
  • 07.《交换机三层功能、单臂路由与端口安全基础知识》
  • cosy-3
  • 在Ubuntu服务器上安装KingbaseES V009R002C012(Orable兼容版)数据库过程详细记录
  • 服务器音频查找
  • 《打破 “慢“ 的黑箱:前端请求全链路耗时统计方案》