Spring Task定时任务:3行代码解放双手,告别重复劳动!
👉 这是一个或许对你有用的社群
🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料:
-
《项目实战(视频)》:从书中学,往事中“练”
-
《互联网高频面试题》:面朝简历学习,春暖花开
-
《架构 x 系统设计》:摧枯拉朽,掌控面试高频场景题
-
《精进 Java 学习指南》:系统学习,互联网主流技术栈
-
《必读 Java 源码专栏》:知其然,知其所以然

👉这是一个或许对你有用的开源项目
国产Star破10w的开源项目,前端包括管理后台、微信小程序,后端支持单体、微服务架构
RBAC权限、数据权限、SaaS多租户、商城、支付、工作流、大屏报表、ERP、CRM、AI大模型、IoT物联网等功能:
多模块:https://gitee.com/zhijiantianya/ruoyi-vue-pro
微服务:https://gitee.com/zhijiantianya/yudao-cloud
视频教程:https://doc.iocoder.cn
【国内首批】支持 JDK17/21+SpringBoot3、JDK8/11+Spring Boot2双版本
来源:juejin.cn/post/7496369162485317647
一、Spring Task是什么?程序员的"私人助理"
想象你有个24小时待命的英国管家:
-
早上6点:自动帮你煮咖啡(数据备份)
-
中午12点:准时提醒你吃饭(系统监控)
-
凌晨3点:偷偷帮你抢茅台(定时任务)
这就是Spring Task的本质——让程序学会自己"定闹钟"!相比传统的Timer,它就像从诺基亚升级到iPhone:
基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
项目地址:https://github.com/YunaiV/ruoyi-vue-pro
视频教程:https://doc.iocoder.cn/video/
二、3步打造你的时间管理大师
2.1 添加"机械心脏"(依赖注入)
<!-- 使用前先安装"发条" -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
Spring Boot 2.x+版本已经内置定时任务模块,无需额外添加依赖
2.2 启动"定时芯片"(启用注解)
@SpringBootApplication
@EnableScheduling // 给程序装上定时芯片
public class TaskApplication {
public static void main(String[] args) {
SpringApplication.run(TaskApplication.class, args);
}
}
2.3 编写"日程表"(定时方法)
@Component
public class MyTask {
// 每天23:59:59执行(打工人日报提醒)
@Scheduled(cron = "59 59 23 * * ?")
public void dailyReport() {
System.out.println("【系统提示】记得写日报!");
}
}
基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
项目地址:https://github.com/YunaiV/yudao-cloud
视频教程:https://doc.iocoder.cn/video/
三、Cron表达式:时间管理的摩斯密码
3.1 7位密码解析器
秒 分 时 日 月 周 年(可选)
记忆口诀: "秒杀时分日月周年"
3.2 常用组合姿势
3.3 特殊符号说明书
-
*:比老板的要求更野(每时每刻) -
?:佛系青年专用(不指定具体值) -
L:最后的倔强(最后一天) -
W:社畜必修(最近工作日) -
#:霸道总裁选择(第N个周X)
四、六大应用场景:解放生产力的秘密武器
4.1 数据同步:系统间的"快递小哥"
@Scheduled(fixedRate = 3600000) // 每小时跑腿一次
public void syncOrderStatus() {
// 把订单系统的状态"搬运"到物流系统
}
4.2 日志清理:数字世界的扫地机器人
@Scheduled(cron = "0 0 3 * * ?") // 每天凌晨3点打扫
public void cleanLogs() {
// 把7天前的日志文件"扫"进回收站
}
4.3 定时邮件:不会忘事的电子秘书
@Scheduled(cron = "0 0 9 ? * MON") // 每周一早上9点
public void sendWeeklyReport() {
// 自动给老板发送"表面功夫"周报
}
五、Spring Task的四大超能力
5.1 简单到犯规的配置
@Scheduled(fixedDelay = 5000) // 5秒后重复
@Scheduled(fixedRate = 3000) // 3秒一次
@Scheduled(initialDelay = 10000, fixedRate = 5000) // 10秒后开始,每5秒一次
5.2 线程池调优指南
@Configuration
public class TaskConfig implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
// 创建10个线程的定时任务线程池
taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
}
}
5.3 分布式环境生存指南
当多个实例同时运行时:
-
使用Redis分布式锁
-
数据库乐观锁控制
-
借助Zookeeper选举主节点
六、避坑指南:定时任务界的黑暗森林
6.1 单线程陷阱
默认单线程执行时,前一个任务卡住会导致后续任务排队。解决方案:
@EnableAsync // 开启异步模式
@Async // 给方法加上"加速器"
@Scheduled(fixedRate = 1000)
public void asyncTask() {
// 现在不会堵车了
}
6.2 时间漂移问题
使用fixedDelay代替fixedRate:
@Scheduled(fixedDelay = 5000) // 每次执行结束后等5秒
6.3 Cron表达式常见翻车现场
-
0 */5 * * * ?每5分钟(整点开始) -
0 5/10 * * * ?每小时的第5分钟开始,每10分钟一次 -
0 0 12 1W * ?每月最接近1号的工作日中午12点
七、性能优化:让定时任务飞起来
7.1 任务执行时间监控
@Around("@annotation(scheduled)")
public Object monitor(ProceedingJoinPoint pjp, Scheduled scheduled) throws Throwable {
long start = System.currentTimeMillis();
try {
return pjp.proceed();
} finally {
long cost = System.currentTimeMillis() - start;
log.info("任务执行耗时:{}ms", cost);
}
}
7.2 任务开关控制
# application.properties
schedule.enabled=true
@ConditionalOnProperty(name = "schedule.enabled", havingValue = "true")
@Scheduled(cron = "${schedule.cron}")
public void configurableTask() {
// 可配置的任务
}
八、未来展望:定时任务的星辰大海
-
动态任务管理: 运行时修改cron表达式
-
任务可视化监控: 接入Admin监控面板
-
弹性调度策略: 根据系统负载自动调整
-
分布式协调: 整合Quartz集群方案
// 动态任务示例
@Autowired
private ScheduledTaskRegistrar taskRegistrar;
public void addDynamicTask(Runnable task, String cron) {
taskRegistrar.addCronTask(new CronTask(task, cron));
}
最后友情提醒:
定时任务虽好,但不要贪杯哦!
当你的任务开始需要以下功能时,就该考虑专业调度框架了:
-
✅ 任务持久化
-
✅ 失败重试机制
-
✅ 可视化任务管理
-
✅ 复杂依赖关系
现在就去给你的程序装上"定时芯片"吧!如果遇到任何问题,欢迎在评论区呼叫"任务救援队"~
欢迎加入我的知识星球,全面提升技术能力。
👉 加入方式,“长按”或“扫描”下方二维码噢:

星球的内容包括:项目实战、面试招聘、源码解析、学习路线。





文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
更多推荐



所有评论(0)