diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java index 18705f5..8657664 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java @@ -96,10 +96,10 @@ public class ESJobSearchImpl implements IESJobSearchService private boolean acquireDistributedLock() throws InterruptedException { long start = System.currentTimeMillis(); while (System.currentTimeMillis() - start < WAIT_LOCK_SECONDS * 1000) { - Boolean success = redisCache.setIfAbsent(ES_INIT_LOCK_KEY,"es_init_locked", + boolean success = redisCache.setIfAbsent(ES_INIT_LOCK_KEY,"es_init_locked", LOCK_EXPIRE_SECONDS,TimeUnit.SECONDS ); - if (Boolean.TRUE.equals(success)) { + if (success) { logger.info("成功获取ES初始化分布式锁,key:{}", ES_INIT_LOCK_KEY); return true; } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java index 44e80d8..fa87989 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java @@ -265,4 +265,17 @@ public class RedisCache { return redisTemplate.keys(pattern); } + + /** + * 分布式锁:不存在则设置缓存(原子操作) + * @param key 缓存键 + * @param value 缓存值 + * @param timeout 过期时间 + * @param unit 时间单位 + * @return true=设置成功(获取锁),false=已存在(未获取锁) + */ + public boolean setIfAbsent(String key, Object value, long timeout, TimeUnit unit) { + Boolean result = redisTemplate.opsForValue().setIfAbsent(key, value, timeout, unit); + return Boolean.TRUE.equals(result); + } }