Spring Cloud Alibaba -- 分布式定时任务解决方案(轻量级、快速构建)(ShedLock 、@SchedulerLock )
warning:
这篇文章距离上次修改已过203天,其中的内容可能已经有所变动。
ShedLock 是一个用于协调分布式任务执行的工具,在 Spring Cloud Alibaba 中,我们可以使用 ShedLock 来确保定时任务在集群环境中仅被某个节点执行。
以下是一个使用 ShedLock 的简单示例:
- 添加 Maven 依赖:
<dependency>
<groupId>net.javacrumbs.shedlock</groupId>
<artifactId>shedlock-spring</artifactId>
<version>最新版本</version>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
<version>最新版本</version>
</dependency>
- 配置 ShedLock:
@Configuration
public class ShedLockConfig {
@Bean
public LockProvider lockProvider(String dataIdPrefix) {
return new NacosLockProvider(dataIdPrefix);
}
@Bean
public ScheduledLockConfiguration scheduledLockConfiguration(LockProvider lockProvider) {
return ScheduledLockConfigurationBuilder.withLockProvider(lockProvider)
.withPoolSize(10)
.build();
}
}
- 使用 ShedLock 注解:
@Component
public class SampleTask {
@ScheduledLock(name = "scheduledTaskName", lockAtMostFor = "30s", lockAtLeastFor = "20s")
@Scheduled(fixedRate = 60000)
public void executeTask() {
// 任务逻辑
}
}
在这个例子中,我们定义了一个定时任务 executeTask()
,并使用 @ScheduledLock
注解来确保在同一时间只有一个节点执行这个任务。任务执行的锁是通过 Nacos 作为后端存储进行协调的。
请注意,示例中的 dataIdPrefix
应该是 Nacos 中用于存储锁信息的 dataId 前缀,确保与 Nacos 配置中心集成时使用相同的前缀。
以上代码仅为示例,实际使用时需要根据具体环境进行调整,例如配置 Nacos 的服务地址、命名空间等。
评论已关闭