Spring Boot开启定时任务
Spring Boot开启定时任务
一、启用定时任务功能
在 Spring Boot 主类或配置类上添加 @EnableScheduling
注解:
@SpringBootApplication
@EnableScheduling // 启用定时任务
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
二、创建定时任务方法
在任意 Spring Bean 中定义方法,并使用 @Scheduled
注解配置执行时间:
@Component
public class MyScheduler {
// 每隔 5 秒执行一次(固定频率)
@Scheduled(fixedRate = 5000)
public void task1() {
System.out.println("Fixed Rate Task: " + new Date());
}
// 上一次任务结束后,间隔 3 秒再执行(固定延迟)
@Scheduled(fixedDelay = 3000)
public void task2() {
System.out.println("Fixed Delay Task: " + new Date());
}
// 使用 Cron 表达式(每天 8 点执行)
@Scheduled(cron = "0 0 8 * * ?")
public void task3() {
System.out.println("Cron Task: " + new Date());
}
}
三、@Scheduled
参数详解
-
fixedRate
: 固定频率执行(单位:毫秒),无论上一次任务是否完成。 -
fixedDelay
: 上一次任务完成后,间隔指定时间再执行(单位:毫秒)。 -
cron
: 使用 Cron 表达式定义复杂时间规则(如0 0/5 * * * ?
每 5 分钟执行一次)。
四、Cron 表达式格式
Spring Boot 中的 Cron 表达式为 6 个字段(传统 Unix Cron 是 5 个字段):
秒(0-59) 分(0-59) 时(0-23) 日(1-31) 月(1-12) 周(0-7,0 和 7 均为周日)
示例:
-
0 0 10 * * *
:每天 10:00 执行 -
0 0/30 9-17 * * MON-FRI
:工作日 9:00 到 17:00,每 30 分钟执行一次 -
0 15 10 L * ?
:每月最后一天的 10:15 执行
五、自定义线程池(可选)
默认情况下,所有定时任务共享单一线程。如需并发执行,可配置自定义线程池:
@Configuration
public class SchedulerConfig implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.setScheduler(Executors.newScheduledThreadPool(5));
}
}
常见问题排查
- 任务未执行:确保类被 Spring 扫描(添加
@Component
等注解)。 - Cron 表达式错误:使用在线工具(如 Cron Maker)验证。
- 任务阻塞:长时间任务可能影响其他任务,考虑异步执行(结合
@Async
)。
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 程序员七字节
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果