拉萨市网站建设_网站建设公司_前端开发_seo优化
2026/1/12 16:40:23 网站建设 项目流程

一、定时任务怎么用?

1️⃣ 开启定时任务

@SpringBootApplication@EnableSchedulingpublicclassApplication{publicstaticvoidmain(String[]args){SpringApplication.run(Application.class,args);}}

2️⃣ 编写定时任务

@ComponentpublicclassOrderTask{// 每 5 秒执行一次@Scheduled(fixedRate=5000)publicvoidcheckOrderStatus(){System.out.println("检查订单状态...");}}

3️⃣ 常见调度方式

// 固定间隔(上一次开始 → 下一次开始)@Scheduled(fixedRate=5000)// 固定延迟(上一次结束 → 下一次开始)@Scheduled(fixedDelay=5000)// Cron 表达式(最灵活)@Scheduled(cron="0 0 2 * * ?")// 每天凌晨 2 点

4️⃣ Cron 表达式速记

秒 分 时 日 月 周002**?
  • *任意

  • ?不指定

  • 0/5每 5 秒

  • MON-FRI周一到周五

📌适合场景
库存检查、数据同步、日志清理、缓存预热


二、线程池

默认的@Scheduled是单线程的,任务一堵,后面的都排队 🐌。

1️⃣ 自定义线程池

@Configuration@EnableSchedulingpublicclassScheduleConfig{@BeanpublicTaskSchedulertaskScheduler(){ThreadPoolTaskSchedulerscheduler=newThreadPoolTaskScheduler();scheduler.setPoolSize(5);scheduler.setThreadNamePrefix("schedule-");scheduler.initialize();returnscheduler;}}

2️⃣ 好处

  • 多任务并行执行

  • 不怕某个任务“赖着不走”


四、分布式定时任务:防止“多实例同时跑”

在集群环境中,一个定时任务可能被多个节点同时执行,很危险 ⚠️。

常见解决方案

✅ 1️⃣ Redis 分布式锁
@Scheduled(cron="0 */5 * * * ?")publicvoidtask(){if(redisLock.tryLock("order_task")){try{// 业务逻辑}finally{redisLock.unlock("order_task");}}}
✅ 2️⃣ ShedLock(强烈推荐)
@Scheduled(cron="0 0 1 * * ?")@SchedulerLock(name="cleanTask",lockAtMostFor="10m")publicvoidcleanData(){// 只会有一个实例执行}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询