From fab8208b83a3c710cdfc3805655f04f0b7466be5 Mon Sep 17 00:00:00 2001
From: xiejun <xiejun@vci-tech.com>
Date: 星期三, 08 一月 2025 11:26:00 +0800
Subject: [PATCH] 产品型号集成,类型转换,人员组织加日志,申请接口引用码段值校验
---
Source/BladeX-Tool/blade-starter-redis/src/main/java/org/springblade/core/redis/lock/RedisLockClientImpl.java | 79 +++++++++++++++++++++++++++++++++++++++
1 files changed, 79 insertions(+), 0 deletions(-)
diff --git a/Source/BladeX-Tool/blade-starter-redis/src/main/java/org/springblade/core/redis/lock/RedisLockClientImpl.java b/Source/BladeX-Tool/blade-starter-redis/src/main/java/org/springblade/core/redis/lock/RedisLockClientImpl.java
new file mode 100644
index 0000000..597c1c5
--- /dev/null
+++ b/Source/BladeX-Tool/blade-starter-redis/src/main/java/org/springblade/core/redis/lock/RedisLockClientImpl.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2018-2028, DreamLu All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the dreamlu.net developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: DreamLu 鍗㈡槬姊� (596392912@qq.com)
+ */
+
+package org.springblade.core.redis.lock;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
+import org.springblade.core.tool.function.CheckedSupplier;
+import org.springblade.core.tool.utils.Exceptions;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 閿佸鎴风
+ *
+ * @author L.cm
+ */
+@Slf4j
+@RequiredArgsConstructor
+public class RedisLockClientImpl implements RedisLockClient {
+ private final RedissonClient redissonClient;
+
+ @Override
+ public boolean tryLock(String lockName, LockType lockType, long waitTime, long leaseTime, TimeUnit timeUnit) throws InterruptedException {
+ RLock lock = getLock(lockName, lockType);
+ return lock.tryLock(waitTime, leaseTime, timeUnit);
+ }
+
+ @Override
+ public void unLock(String lockName, LockType lockType) {
+ RLock lock = getLock(lockName, lockType);
+ // 浠呬粎鍦ㄥ凡缁忛攣瀹氬拰褰撳墠绾跨▼鎸佹湁閿佹椂瑙i攣
+ if (lock.isLocked() && lock.isHeldByCurrentThread()) {
+ lock.unlock();
+ }
+ }
+
+ private RLock getLock(String lockName, LockType lockType) {
+ RLock lock;
+ if (LockType.REENTRANT == lockType) {
+ lock = redissonClient.getLock(lockName);
+ } else {
+ lock = redissonClient.getFairLock(lockName);
+ }
+ return lock;
+ }
+
+ @Override
+ public <T> T lock(String lockName, LockType lockType, long waitTime, long leaseTime, TimeUnit timeUnit, CheckedSupplier<T> supplier) {
+ try {
+ boolean result = this.tryLock(lockName, lockType, waitTime, leaseTime, timeUnit);
+ if (result) {
+ return supplier.get();
+ }
+ } catch (Throwable e) {
+ throw Exceptions.unchecked(e);
+ } finally {
+ this.unLock(lockName, lockType);
+ }
+ return null;
+ }
+
+}
--
Gitblit v1.9.3