SpringBoot集成分布式锁ShedLock

ShedLock做用

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

实现过程

引入依赖

<dependency>
        <groupId>net.javacrumbs.shedlock</groupId>
        <artifactId>shedlock-spring</artifactId>
        <version>2.5.0</version>
    </dependency>
    <dependency>
        <groupId>net.javacrumbs.shedlock</groupId>
        <artifactId>shedlock-provider-redis-spring</artifactId>
        <version>2.5.0</version>
    </dependency>

增长配置类

//标识该类为配置类
@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");
    }
 }
相关文章
相关标签/搜索