package com.webflux.launchcommon.config; import net.javacrumbs.shedlock.core.LockProvider; import net.javacrumbs.shedlock.provider.redis.spring.RedisLockProvider; import net.javacrumbs.shedlock.spring.annotation.EnableSchedulerLock; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; @Configuration @EnableSchedulerLock(defaultLockAtMostFor = "PT55S") public class SchedulerLock { // defaultLockAtMostFor 指定在执行节点结束时应保留锁的默认时间使用ISO8601 Duration格式 // 作用就是在被加锁的节点挂了时,无法释放锁,造成其他节点无法进行下一任务 // 这里默认55s // 关于ISO8601 Duration格式用的不到,具体可上网查询下相关资料,应该就是一套规范,规定一些时间表达方式 public class ShedLockRedisConfig { @Value("${spring.profiles.active}") private String env; @Bean public LockProvider lockProvider(RedisConnectionFactory connectionFactory) { // 环境变量 -需要区分不同环境避免冲突,如dev环境和test环境,两者都部署时,只有一个实例进行,此时会造成相关环境未启动情况 System.out.println(env); return new RedisLockProvider(connectionFactory, env); } } }