|
|
@@ -0,0 +1,30 @@
|
|
|
+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
|
|
|
+public class SchedulerLock {
|
|
|
+//defaultLockAtMostFor 指定在执行节点结束时应保留锁的默认时间使用ISO8601 Duration格式
|
|
|
+//作用就是在被加锁的节点挂了时,无法释放锁,造成其他节点无法进行下一任务
|
|
|
+//这里默认55s
|
|
|
+//关于ISO8601 Duration格式用的不到,具体可上网查询下相关资料,应该就是一套规范,规定一些时间表达方式
|
|
|
+ @EnableSchedulerLock(defaultLockAtMostFor = "PT55S")
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|