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");
    }
 }
相關文章
相關標籤/搜索