一、Spring Task简介
Spring Task 是 Spring 框架提供的一个轻量级任务调度功能,用于简化任务的异步执行和定时任务的配置。它基于 Spring 的任务执行框架(TaskExecutor
)和任务调度框架(TaskScheduler
),允许开发者通过注解或配置文件的方式定义任务,并灵活地控制任务的执行。
二、Maven基础配置
-
导入maven坐标
Spring Task并没有单独的jar包,它被集成于spring-context下,而spring-context可以通过spring-boot-starter进行依赖传递,所以一般的,我们不需要专门导入,如果需要则按以下模式导入。<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring-context}</version> <!-- ${spring-context} 替换为合适版本或直接省略version标签由父依赖决定 --> </dependency>
-
启动类添加注解
@EnableScheduling //开启任务调度
三、自定义定时任务类
- 核心注解
@Scheduled
:用于定义定时任务,可以指定任务的执行周期。@Scheduled(fixedRate = 5000) // 每5秒执行一次 public void fixedRateJob() { System.out.println("Fixed Rate Job"); } @Scheduled(cron = "0 0/30 * * * ?") // 每半小时执行一次 public void cronJob() { System.out.println("Cron Job"); }
fixedRate
:指定任务的执行频率,单位为毫秒,用法比较单一。
cron表达式的字段含义
:
秒(0-59) 分(0-59) 小时(0-23) 日期(1-31) 月份(1-12 或 JAN-DEC)
星期几(0-7 或 SUN-SAT,其中 0 和 7 都表示周日) 年份(可选字段)
用法灵活,相对复杂,可直接通过chatgpt或其他工具生成Cron - 在线Cron表达式生成器
-
@Async
:用于定义异步任务,可以让方法在单独的线程中执行。@Async public void asyncJob() { System.out.println("Async Job"); }
-
在Spring Boot项目中写一个简单的自定义定时任务类
import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.Date; /** * 自定义定时任务类 */ @Component//交给IOC容器 @Slf4j public class MyTask { /** * 每隔五秒运行一次 */ @Scheduled(cron = "0/5 * * * * ?") public void executeTask(){ log.info("定时任务开始执行:{}",new Date()); } }
需要注意的是
@Scheduled
注解被用于定义一个定时任务,而@Component
注解将MyTask
类注册为一个 Spring Bean,交由 Spring 容器管理。Spring 的任务调度机制会自动扫描带有@Scheduled
注解的方法,并按照指定的 Cron 表达式执行这些方法。因此,不需要手动调用executeTask()
方法,Spring 会自动触发它。
基于上述描述,我们可以在所定义的方法内设置一些需要的业务操作,以达到定时任务的目的。