SchedulerLock.java 1.5 KB

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