文章目录
- github地址
- pom依赖添加
- yml配置数据源
- config配置(数据源 + shedLock)
- 定时任务添加shedLock注解
- 任务执行起来之后,redis中的数据格式
github地址
https://github.com/lukas-krecan/ShedLock
pom依赖添加
<!-- redis组件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<!-- 定时任务的分布式锁-->
<dependency>
<groupId>net.javacrumbs.shedlock</groupId>
<artifactId>shedlock-spring</artifactId>
<version>4.23.0</version>
</dependency>
<dependency>
<groupId>net.javacrumbs.shedlock</groupId>
<artifactId>shedlock-provider-redis-spring</artifactId>
<version>4.23.0</version>
</dependency>
yml配置数据源
spring:
redis:
cluster:
nodes:
- 集群ip+port
- 集群ip+port
- 集群ip+port
- 集群ip+port
- 集群ip+port
- 集群ip+port
password: 密码 # Redis服务器连接密码(默认为空)
timeout: 1000 # 连接超时时间(毫秒)
maxAttempts: 5
soTimeout: 1000
jedis:
pool:
max-active: 100
max-wait: 1000
max-idle: 10
min-idle: 1
config配置(数据源 + shedLock)
- RedisClusterConfigProperties 配置读取类
@Component
@ConfigurationProperties(prefix = "spring.redis.cluster")
@Data
public class RedisClusterConfigProperties {
private List<String> nodes;
private Integer timeout;
private Integer soTimeout;
private String password;
private Integer maxAttempts;
}
- RedisConfig配置类
@Configuration
@EnableSchedulerLock(defaultLockAtMostFor = "PT30S") // shedLock配置,默认的最大锁持有时间为30s
public class RedisConfig extends CachingConfigurerSupport {
/**
* 分布式锁对象
* @param connectionFactory reids连接工厂
* @return
*/
@Bean
public LockProvider lockProvider(RedisConnectionFactory connectionFactory) {
return new RedisLockProvider(connectionFactory);
}
}
定时任务添加shedLock注解
/**
* 定时任务
*/
@Scheduled(cron = "${task.schedule.paasAndIaasSchedule}")
@Async
@SchedulerLock(name = "paas/iaas_schedulerLock", lockAtLeastFor = "55s", lockAtMostFor = "55s") // name为分布式锁名称
public void alarm(){
// 定时任务执行逻辑
}