大数跨境
0
0

高级开发! 一个注解@DistributedScheduled实现分布式定时任务

高级开发! 一个注解@DistributedScheduled实现分布式定时任务 Spring全家桶实战案例
2025-06-11
0
导读:高级开发! 一个注解@DistributedScheduled实现分布式定时任务
Spring Boot 3实战案例锦集PDF电子书已更新至100篇!

🎉🎉《Spring Boot实战案例合集》目前已更新132个案例,我们将持续不断的更新。文末有电子书目录。

💪💪永久更新承诺

我们郑重承诺,所有订阅合集的粉丝都将享受永久免费的后续更新服务

💌💌如何获取
订阅我们的合集点我订阅,并通过私信联系我们,我们将第一时间将电子书发送给您。

现在就订阅合集


环境:SpringBoot3.4.0



1. 简介

在分布式系统中,定时任务调度是个常见需求。为了学习相关知识,我们尝试自己实现一个简易版的分布式任务调度。核心在于@DistributedScheduled注解,它让我们能像使用Spring的@Scheduled一样,方便地定义任务的执行时间。

这个注解背后,其实有一套分布式锁的机制。我们利用Redis(Redssion),确保同一时间只有一个节点能执行任务。当任务执行时间到,多个节点会尝试获取锁,只有获取成功的节点才会真正执行任务。

通过这种方式,我们实现了分布式环境下的定时任务调度,既保证了任务的精确执行,又避免了资源的浪费和数据的冲突。虽然市面上已有许多成熟的分布式任务调度组件,但自己动手实现,无疑能更深入地理解其背后的原理和机制。

最终效果如下:

@DistributedScheduled(    cron = "0/5 * * * * ?",    group = "ordertest")public class OrderCleanupTask {}

接下来,我们将通过自定义的 @DistributedScheduled 注解实现分布式定时任务(具体定时任务的执行我们还会依赖Spring实现的定时任务机制),同时还会借助Redssion实现分布式锁。

2. 实战案例

2.1 自定义注解

@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)public @interface DistributedScheduled {    // Cron表达式  String cron() ;  // 任务分组  String group() default "default" ;}
这里定义了一个group属性,该属性将被用作生成分布式锁key的一部分(目前仅限于此用途)。我们特意将该注解设计为仅能应用于类级别,确保每个任务作为一个独立的类存在,这与Spring提供的作用于方法级别的定时任务机制有所不同。

2.2 元数据定义

我们通过record来定义每个注解配置的数据:

public record TaskDetail(  String cron, String group, String beanName) {}

【声明】内容源于网络
0
0
Spring全家桶实战案例
Java全栈开发,前端Vue2/3全家桶;Spring, SpringBoot 2/3, Spring Cloud各种实战案例及源码解读
内容 832
粉丝 0
Spring全家桶实战案例 Java全栈开发,前端Vue2/3全家桶;Spring, SpringBoot 2/3, Spring Cloud各种实战案例及源码解读
总阅读38
粉丝0
内容832