利用redis实现定时任务分布式锁
基于注解的分布式定时任务锁
一、依赖导入
<dependency>
<groupId>net.javacrumbs.shedlock</groupId>
<artifactId>shedlock-spring</artifactId>
<version>4.3.1</version>
</dependency>
<dependency>
<groupId>net.javacrumbs.shedlock</groupId>
<artifactId>shedlock-provider-redis-spring</artifactId>
<version>4.3.1</version>
</dependency>
二、新增配置类
@Configuration
public class ClusterLockConfiguration {
@Bean
public ClusterLock clusterLock(StringRedisTemplate redisTemplate) {
return new RedisClusterLockImpl(redisTemplate);
}
}
3、在启动类上添加启动注解
@EnableSchedulerLock(defaultLockAtMostFor = "30s")'
4、在定时任务添加注解
@SchedulerLock(name = "com.ifugle.dop.appoint.web.pc.op.PoAppointTaxHnSyncController.autoSyncAppointStatus", lockAtLeastFor = "1m", lockAtMostFor = "9m")
@Scheduled(cron = "0 0 */1 * * *")
注:1m 最小锁时长 1分钟 最大锁时长9分钟