ShedLock 使用教程
ShedLockDistributed lock for your scheduled tasks项目地址:https://gitcode.com/gh_mirrors/sh/ShedLock
项目介绍
ShedLock 是一个用于确保计划任务在分布式系统中只执行一次的库。它不是一个分布式调度器,而是一个简单的锁机制,用于防止任务在多个节点上并行执行。ShedLock 支持多种外部存储,如 MongoDB、JDBC 数据库、Redis、Hazelcast、ZooKeeper 等,用于协调不同节点上的任务执行。
项目快速启动
依赖引入
首先,在项目的 pom.xml
文件中添加 ShedLock 的依赖:
<dependency>
<groupId>net.javacrumbs.shedlock</groupId>
<artifactId>shedlock-spring</artifactId>
<version>5.14.0</version>
</dependency>
<dependency>
<groupId>net.javacrumbs.shedlock</groupId>
<artifactId>shedlock-provider-jdbc-template</artifactId>
<version>5.14.0</version>
</dependency>
配置 ShedLock
在 Spring Boot 项目中,配置 ShedLock 的锁提供者:
import net.javacrumbs.shedlock.core.LockProvider;
import net.javacrumbs.shedlock.provider.jdbc.JdbcTemplateLockProvider;
import net.javacrumbs.shedlock.spring.annotation.EnableSchedulerLock;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import javax.sql.DataSource;
@Configuration
@EnableScheduling
@EnableSchedulerLock(defaultLockAtMostFor = "10m")
public class ShedLockConfig {
@Bean
public LockProvider lockProvider(DataSource dataSource) {
return new JdbcTemplateLockProvider(dataSource);
}
}
定义计划任务
使用 @SchedulerLock
注解来定义计划任务:
import net.javacrumbs.shedlock.spring.annotation.SchedulerLock;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class ScheduledTasks {
@Scheduled(cron = "0 0/15 * * * ?")
@SchedulerLock(name = "scheduledTaskName", lockAtMostFor = "14m", lockAtLeastFor = "14m")
public void scheduledTask() {
// 任务逻辑
}
}
应用案例和最佳实践
应用案例
假设我们有一个分布式系统,需要在每天的特定时间执行一次数据备份任务。使用 ShedLock 可以确保该任务在多个节点中只执行一次,避免重复备份。
最佳实践
- 选择合适的锁提供者:根据项目需求选择合适的锁提供者,如使用 Redis 作为锁提供者可以提高性能。
- 合理设置锁的持续时间:根据任务的执行时间合理设置
lockAtMostFor
和lockAtLeastFor
,确保任务不会因节点故障而无法释放锁。 - 监控锁的使用情况:通过日志或监控系统监控锁的使用情况,及时发现和解决锁相关的问题。
典型生态项目
ShedLock 可以与以下生态项目结合使用:
- Spring Boot:作为 Spring Boot 项目的计划任务锁机制。
- Hazelcast:作为分布式锁提供者,提供高性能的分布式锁服务。
- Redis:作为锁提供者,提供快速的锁服务。
- MongoDB:作为锁提供者,适用于需要持久化锁信息的项目。
通过结合这些生态项目,可以构建更加健壮和高效的分布式系统。
ShedLockDistributed lock for your scheduled tasks项目地址:https://gitcode.com/gh_mirrors/sh/ShedLock