SpringTask简介

简单介绍了SpringTask定时任务,提供了简单的代码案例

SpringTask简介

简介

Spring Task 是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。

定位:定时任务框架

作用:定时自动执行某段Java代码

只要是需要定时处理的场景都可以使用Spring Task

cron表达式

cron表达式其实就是一个字符串,通过cron表达式可以定义任务触发的时间

构成规则:分为6或7个域,由空格分隔开,每个域代表一个含义

每个域的含义分别为:秒、分钟、小时、日、月、周、年(可选)

举例:

2022年10月12日上午9点整 对应的cron表达式为:0 0 9 12 10 ? 2022

image-20251021235639375

说明:一般的值不同时设置,其中一个设置,另一个用?表示

比如:描述2月份的最后一天,最后一天具体是几号不确定,可能是28号,也有可能是29号,所以就不能写具体数字

cron表达式在线生成器:https://cron.qqe2.com/

通配符

通配符 含义 适用字段 示例
* 匹配该字段的所有可能值,即 “每” 所有字段 分钟字段为*表示 “每分钟”;月份字段为*表示 “每月”
? 仅用于 “日” 和 “周” 字段,表示 “不指定值”(避免两者冲突) 日、周 若指定 “每月 10 日”(日 = 10),则周字段需用?表示 “不关心周几”
- 表示范围,定义连续的时间区间 所有字段 小时字段9-18表示 “9 点到 18 点(含 9 和 18)”
, 表示列举多个独立的值 所有字段 周字段1,3,5表示 “周一、周三、周五”(1 = 周一,7 = 周日)
/ 表示 “间隔”,格式为 “起始值 / 步长”,即从起始值开始,每隔步长执行一次 秒、分、时、日、月、周 分钟字段0/15表示 “从 0 分开始,每 15 分钟”(0 分、15 分、30 分、45 分)
L 表示 “最后”,需结合具体字段理解 日、周 - 日字段L表示 “当月最后一天”;- 周字段6L表示 “当月最后一个周六”(6 = 周六)
W 表示 “最近的工作日”(周一至周五),仅用于 “日” 字段 日字段15W表示 “15 日最近的工作日”(若 15 日是周六,则为 14 日周五)
# 表示 “当月第 n 个周几”,格式为 “周几 #n”,仅用于 “周” 字段 周字段2#3表示 “当月第 3 个周二”(2 = 周二)

cron表达式案例

*/5 * * * * ? 每隔5秒执行一次

0 */1 * * * ? 每隔1分钟执行一次

0 0 5-15 * * ? 每天5-15点整点触发

0 0/3 * * * ? 每三分钟触发一次

0 0-5 14 * * ? 在每天下午2点到下午2:05期间的每1分钟触发

0 0/5 14 * * ? 在每天下午2点到下午2:55期间的每5分钟触发

0 0/5 14,18 * * ? 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发

0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时

0 0 10,14,16 * * ? 每天上午10点,下午2点,4点

案例演示

使用步骤

1.首先要导入Maven坐标,一般SpringBoot的起步依赖中已经传递进来了,无需手动导入

image-20251022000240526

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

3.自定义定时任务类

代码演示

启动类:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
package com.sky;

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;

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

自定义任务类:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.sky.task;

import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Date;

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

运行结果:

image-20251022001704762

本站于2025年3月26日建立
使用 Hugo 构建
主题 StackJimmy 设计