SpringBoot集成分布式锁ShedLock

ShedLock作用

SchedulerLock的作用,确保任务在同一时刻最多执行一次。如果一个任务已经在一个节点上执行,则在其他节点上的执行不会等待,只需跳过它即可。
ShedLock通过外部存储实现锁,包括数据库、Redis、MongoDB、ZooKeeper等。本文以Redis作为存储为例。

实现过程

引入依赖


        net.javacrumbs.shedlock
        shedlock-spring
        2.5.0
    
    
        net.javacrumbs.shedlock
        shedlock-provider-redis-spring
        2.5.0
    

增加配置类

//标识该类为配置类
@Configuration
//开启定时器
@EnableScheduling
//开启定时任务锁,并设置默认锁最大时间为5分钟(PT为固定格式,M为时间单位)
@EnableSchedulerLock(defaultLockAtMostFor = "PT5M")
public class ShedLockConfig {
//初始化锁提供者,使用Redis作为外部存储
@Bean
public LockProvider lockProvider(RedisTemplate redisTemplate) {
    return new RedisLockProvider(redisTemplate.getConnectionFactory());
   }
}

创建定时任务

public class AutoRevokeScheduler{
    //定时器时间配置 cron表达式
    @Scheduled(cron = "*/10 * * * * ?")
    //标识使用分布式锁
    @SchedulerLock(name = "assignExpireOrderSchedule")
    public void expireOrderSchedule() {
            log.info("执行方法HailingScheduler-assignExpireOrderSchedule, " +
                    "耗时=" + (System.currentTimeMillis() - t1) + "ms");
    }
 }

你可能感兴趣的:(java分布式锁)