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