Spring Boot @Scheduled 注解速查:核心语法与实用示例
·
Spring Boot @Scheduled 注解速查:核心语法与实用示例
本文适合收藏备查。定时任务的配置不再令人头疼。
核心语法
| 注解 | 说明 |
|---|---|
@Scheduled |
用于标记需要定时执行的方法 |
cron |
使用 Cron 表达式定义任务执行时间,格式为 cron="秒 分 时 日 月 周" |
fixedRate |
每隔固定时间(单位:毫秒)执行一次任务,格式为 fixedRate=1000 |
fixedDelay |
在上一次任务完成后,延迟固定时间(单位:毫秒)再执行下一次任务,格式为 fixedDelay=1000 |
initialDelay |
在应用启动后,延迟一定时间(单位:毫秒)后开始执行任务,格式为 initialDelay=5000 |
配置启用
在 Spring Boot 应用中启用定时任务,需要在主类或配置类上添加 @EnableScheduling 注解:
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@EnableScheduling
public class ScheduledApplication {
public static void main(String[] args) {
SpringApplication.run(ScheduledApplication.class, args);
}
}
基本示例
每 5 秒执行一次
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class ScheduledTasks {
@Scheduled(fixedRate = 5000)
public void runEvery5Seconds() {
System.out.println("每 5 秒执行一次任务");
}
}
每 5 秒执行一次,上一次任务完成后延迟 1 秒
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class ScheduledTasks {
@Scheduled(fixedDelay = 5000, initialDelay = 1000)
public void runWithDelay() {
System.out.println("上一次任务完成后延迟 1 秒,每 5 秒执行一次任务");
}
}
Cron 表达式示例
每分钟执行一次
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class ScheduledTasks {
@Scheduled(cron = "0 * * * * ?")
public void runEveryMinute() {
System.out.println("每分钟执行一次任务");
}
}
每天午夜 12 点执行
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class ScheduledTasks {
@Scheduled(cron = "0 0 0 * * ?")
public void runAtMidnight() {
System.out.println("每天午夜 12 点执行一次任务");
}
}
每周一早上 8 点执行
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class ScheduledTasks {
@Scheduled(cron = "0 0 8 ? * MON")
public void runOnMondayMorning() {
System.out.println("每周一早上 8 点执行一次任务");
}
}
每小时执行一次,从 15 分钟开始
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class ScheduledTasks {
@Scheduled(cron = "0 15 * * * ?")
public void runEveryHourStartingAt15() {
System.out.println("每小时执行一次,从 15 分钟开始");
}
}
高级用法
动态 Cron 表达式
可以通过 @Value 注解从配置文件中读取 Cron 表达式:
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.beans.factory.annotation.Value;
@Component
public class ScheduledTasks {
@Value("${cron.expression}")
private String cronExpression;
@Scheduled(cron = "${cron.expression}")
public void dynamicCron() {
System.out.println("使用动态 Cron 表达式执行任务");
}
}
多线程执行
通过配置 TaskScheduler 可以实现多线程执行定时任务:
spring:
task:
scheduling:
pool:
size: 10
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class ScheduledTasks {
@Scheduled(fixedRate = 5000)
public void runInParallel() {
System.out.println("多线程执行任务");
}
}
常见问题
-
如何停止定时任务? 使用
@Scheduled注解无法直接停止定时任务,可以通过ScheduledTask和TaskScheduler实现任务的动态管理。 -
如何处理任务执行中的异常? 可以在方法中捕获异常,或使用
@Scheduled的errorHandler属性指定异常处理器。 -
如何调试定时任务? 使用日志记录任务的执行情况,或在开发环境中设置断点进行调试。
实用工具推荐
Cron 表达式生成器 - 快速生成符合需求的 Cron 表达式,支持中文描述转换。
Hey Cron 还提供以下实用工具:
- 正则表达式生成器 - 快速生成符合需求的正则表达式。
- 中英互译 - 实时翻译中英文,支持多语言互译。
- JSON 格式化 - 格式化 JSON 字符串,便于阅读和调试。
- Base64 编码解码 - 快速编码和解码 Base64 字符串。
- 时间戳转换 - 转换时间戳与日期时间。
- JWT 解析 - 解析 JWT 令牌,查看其内容。
这些工具都能在实际开发中大大提升效率,建议收藏备用。
更多推荐




所有评论(0)