让方法周期性自动执行,轻松实现定时任务!
为方法添加定时任务功能,支持按固定间隔、延迟或Cron表达式触发执行。 基于Spring Task调度,适用于日志清理、数据同步等周期性场景。
@EnableScheduling
:@SpringBootApplication
@EnableScheduling
public class App { ... }
在方法上添加 @Scheduled
,并指定触发规则:
@Component
public class TaskService {
// 方式1:固定速率(间隔时间包含任务执行时间)
@Scheduled(fixedRate = 5000) // 每5秒执行一次
public void task1() { ... }
// 方式2:固定延迟(任务完成后间隔指定时间)
@Scheduled(fixedDelay = 3000) // 任务结束3秒后再次执行
public void task2() { ... }
// 方式3:Cron表达式(灵活控制时间)
@Scheduled(cron = "0 0 2 * * ?") // 每天凌晨2点执行
public void task3() { ... }
}
@Configuration
public class ScheduleConfig implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.setScheduler(Executors.newScheduledThreadPool(5));
}
}
@Scheduled(cron="0 0 0 * * ?", zone="Asia/Shanghai")
格式:秒 分 时 日 月 周 年(可选)
字段 | 允许值 | 特殊符号 |
---|---|---|
秒 | 0-59 | * , - / ? |
分 | 0-59 | 同上 |
时 | 0-23 | 同上 |
日 | 1-31 | * , - / ? L W |
月 | 1-12 或 JAN-DEC | * , - / |
周 | 1-7 或 SUN-SAT | * , - / ? L # |
常用符号
*
:任意值?
:不指定(用于日或周字段冲突时)-
:范围(如 10-20
)/
:间隔(如 0/5
秒 → 每5秒)L
:最后一天(日)/ 最后一周(周)W
:最近工作日(如 15W
当月15日最近的工作日)(6位格式:秒 分 时 日 月 周,兼容Spring Task)
表达式 | 说明 | 应用场景示例 |
---|---|---|
0/10 * * * * ? | 每隔10秒执行一次 | 实时监控、数据刷新 |
0 0/5 * * * ? | 每隔5分钟执行一次 | 定时拉取API数据 |
0 0 * * * ? | 每小时整点执行 | 日志归档、缓存清理 |
0 0 9-18 * * ? | 每天9点到18点整点执行 | 工作日定时通知任务 |
0 0 12 * * ? | 每天中午12点执行 | 统计日报生成 |
0 0 0 * * ? | 每天凌晨0点执行 | 日终数据结算 |
0 0 0 1 * ? | 每月1号凌晨0点执行 | 月度报表生成 |
0 0 8 ? * 2-6 | 每周一至周五早上8点执行(2-6=周一~周五) | 工作日晨间任务 |
0 0 10 L * ? | 每月最后一天上午10点执行(L=最后一天) | 月末数据备份 |
0 0 0 LW * ?** | 每月最后一个工作日的0点执行 | 避免在非工作日执行月末任务 |
0 0 0 3W * ? | 每月3日最近的工作日0点执行(若3日为周末则提前) | 避开周末的固定日任务 |
0 0 0 1 1 ? | 每年1月1日0点执行 | 年度初始化任务 |
zone = "GMT+8"
显式指定(如北京时间)。📌 复制即用,效率翻倍!
@Scheduled
,复杂场景用 Quartz。@Async
)。cron-validator
库或在线工具校验表达式合法性。掌握 @Scheduled
,轻松实现精准调度! 🚀