欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 锐评 > java spring boot 定时任务

java spring boot 定时任务

2025/5/17 14:03:06 来源:https://blog.csdn.net/nbspzs/article/details/146527556  浏览:    关键词:java spring boot 定时任务
@Scheduled(cron = "0 0 0 * * ?")@SchedulerLock(name = "ProImpl.sendUserMsg", lockAtMostFor = "PT10M", lockAtLeastFor = "PT1M")public void sendUserMsg() {}

这段代码是 Spring Boot 中的 定时任务,结合 ShedLock 进行分布式任务调度,用于在多个实例中防止任务的并发执行。

### 代码解析

java
@Scheduled(cron = "0 0 0 * *  ?")

 @Scheduled 注解用于定时执行方法。
 cron = "0 0 0   ?" 代表 每天午夜 00:00 执行(秒 分 时 日 月 星期)。
   0 0 0   ?:
     秒:0
     分钟:0
     小时:0
     日:(每天)
     月:(每月)
     星期:?(不指定)

java
@SchedulerLock(
    name = "CustomerActivityInfoServiceImpl.updateActivityBusinessStatus",
    lockAtMostFor = "PT10M",
    lockAtLeastFor = "PT1M"
)

 @SchedulerLock 是 ShedLock 提供的分布式锁,用于防止多个实例同时执行该定时任务。
 参数解析:
   name = "CustomerActivityInfoServiceImpl.updateActivityBusinessStatus"  
     任务的唯一标识符(锁的名称)。
   lockAtMostFor = "PT10M"  
     最多锁定 10 分钟,如果方法执行时间超过 10 分钟,锁会自动释放,避免死锁。
   lockAtLeastFor = "PT1M"  
     至少锁定 1 分钟,即使任务执行时间小于 1 分钟,也不会立即释放锁,防止频繁触发。

java
public void updateActivityBusinessStatus() {

 这是定时任务执行的方法,具体逻辑会在这个方法里实现,比如更新数据库、调用 API 等。

### 总结
这段代码的作用:
1. 每天午夜(00:00)执行 updateActivityBusinessStatus() 方法。
2. 防止多个实例同时执行(使用 ShedLock 分布式锁)。
3. 锁定规则:
    最多锁定 10 分钟(避免任务执行时间过长)。
    至少锁定 1 分钟(避免任务重复执行)。

📌 适用场景:  
在 微服务集群 或 多实例部署 时,确保定时任务只在一个实例上运行,防止数据冲突或重复执行。

 特殊情况
1. 应用未启动:如果服务器宕机或应用未启动,定时任务不会执行,可能需要手动触发或使用补偿机制(如 MQ 或数据库任务表)。
2. 集群环境:多个实例运行时,@SchedulerLock(ShedLock)确保只有一个实例执行任务。
3. Spring 任务调度需启用:需要在 Spring Boot 主类 或 配置类 中加上 @EnableScheduling:java@SpringBootApplication@EnableSchedulingpublic class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}}如果 @EnableScheduling 没有加,@Scheduled 不会生效。总结
✅ 不需要额外触发,Spring 会自动调度。  
✅ 确保 @EnableScheduling 开启,否则 @Scheduled 不生效。  
✅ 集群部署时,ShedLock 确保任务只执行一次,不会多个实例同时触发。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词