Spring Task快速上手

发布于:2025-09-01 ⋅ 阅读:(14) ⋅ 点赞:(0)

一. 介绍

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:任务执行的具体逻辑,可以将这里替换为需要定时处理的业务