5 changed files with 163 additions and 20 deletions
@ -0,0 +1,79 @@ |
|||||
|
package com.epmet.commons.tools.distributedlock; |
||||
|
|
||||
|
import com.epmet.commons.tools.exception.RenException; |
||||
|
import com.epmet.commons.tools.redis.RedisKeys; |
||||
|
import org.apache.commons.lang3.StringUtils; |
||||
|
import org.redisson.api.RLock; |
||||
|
import org.redisson.api.RedissonClient; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.stereotype.Component; |
||||
|
|
||||
|
import java.util.concurrent.TimeUnit; |
||||
|
import java.util.concurrent.atomic.AtomicInteger; |
||||
|
|
||||
|
/** |
||||
|
* @Author zxc |
||||
|
* @DateTime 2020/10/28 9:05 上午 |
||||
|
*/ |
||||
|
@Component |
||||
|
public class DistributedLock { |
||||
|
|
||||
|
@Autowired |
||||
|
private RedissonClient redissonClient; |
||||
|
|
||||
|
/** |
||||
|
* @Description 抢锁🔒 每个锁持有十分钟 |
||||
|
* @Param name |
||||
|
* @author zxc |
||||
|
* @date 2020/10/28 2:52 下午 |
||||
|
*/ |
||||
|
public RLock getLock(String name){ |
||||
|
RLock lock = null; |
||||
|
if (StringUtils.isNotBlank(name)) { |
||||
|
lock = redissonClient.getLock(name); |
||||
|
// 持续时间为 -1 时,直到其明确释放锁才会释放【宕机就完蛋了】,
|
||||
|
lock.lock(10,TimeUnit.MINUTES); |
||||
|
} |
||||
|
return lock; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* @Description |
||||
|
* @Param name 锁名 |
||||
|
* @Param leaseTime 持锁时间 单位:min |
||||
|
* @Param waitTime 获取锁最长等待时间 单位:min |
||||
|
* @author zxc |
||||
|
* @date 2020/10/29 9:04 上午 |
||||
|
*/ |
||||
|
public RLock getLock(String name,Long leaseTime,Long waitTime){ |
||||
|
RLock lock = null; |
||||
|
if (StringUtils.isNotBlank(name) && leaseTime > 0 && waitTime > 0 ){ |
||||
|
lock = redissonClient.getLock(name); |
||||
|
Boolean lockStatus; |
||||
|
try { |
||||
|
lockStatus = lock.tryLock(waitTime,leaseTime,TimeUnit.MINUTES); |
||||
|
if (!lockStatus){ |
||||
|
throw new RenException("获取锁🔒失败了......"); |
||||
|
} |
||||
|
} catch (InterruptedException e) { |
||||
|
e.printStackTrace(); |
||||
|
} |
||||
|
} |
||||
|
return lock; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* @Description 释放锁🔒 |
||||
|
* @Param rLock |
||||
|
* @author zxc |
||||
|
* @date 2020/10/28 2:52 下午 |
||||
|
*/ |
||||
|
public void unLock(RLock rLock){ |
||||
|
if (null != rLock){ |
||||
|
if (rLock.isHeldByCurrentThread()){ |
||||
|
rLock.unlock(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,12 @@ |
|||||
|
package com.epmet.commons.tools.distributedlock; |
||||
|
|
||||
|
/** |
||||
|
* @Author zxc |
||||
|
* @DateTime 2020/10/28 9:23 上午 |
||||
|
*/ |
||||
|
public interface LockConstants { |
||||
|
|
||||
|
String TEST_LOCK_NAME = "testLock"; |
||||
|
|
||||
|
String STATS_LOCK_NAME = "stats"; |
||||
|
} |
@ -0,0 +1,21 @@ |
|||||
|
package com.epmet.stats.test.zxc; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
/** |
||||
|
* @Author zxc |
||||
|
* @DateTime 2020/10/28 3:15 下午 |
||||
|
*/ |
||||
|
@Data |
||||
|
public class ZxcDTO { |
||||
|
|
||||
|
private String a; |
||||
|
private String b; |
||||
|
private String c; |
||||
|
private String d; |
||||
|
private String e; |
||||
|
private Integer f; |
||||
|
private Integer g; |
||||
|
private Integer h; |
||||
|
|
||||
|
} |
Loading…
Reference in new issue