diff --git a/epmet-commons/epmet-commons-tools/pom.xml b/epmet-commons/epmet-commons-tools/pom.xml
index 1a21a9a30e..e2fd786edf 100644
--- a/epmet-commons/epmet-commons-tools/pom.xml
+++ b/epmet-commons/epmet-commons-tools/pom.xml
@@ -49,6 +49,13 @@
org.springframework.boot
spring-boot-starter-data-redis
+
+
+ org.redisson
+ redisson
+ 3.12.5
+
+
com.fasterxml.jackson.core
jackson-databind
diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/config/RedissonConfig.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/config/RedissonConfig.java
new file mode 100644
index 0000000000..8a96e5ccbd
--- /dev/null
+++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/config/RedissonConfig.java
@@ -0,0 +1,56 @@
+package com.epmet.commons.tools.config;
+
+import com.epmet.commons.tools.constant.NumConstant;
+import com.epmet.commons.tools.constant.StrConstant;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.redisson.Redisson;
+import org.redisson.api.RedissonClient;
+import org.redisson.codec.JsonJacksonCodec;
+import org.redisson.config.Config;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * redisson 配置类
+ */
+@Slf4j
+@Configuration
+public class RedissonConfig {
+
+ @Value("${spring.redis.host}")
+ private String host;
+ @Value("${spring.redis.port}")
+ private String port;
+ @Value("${spring.redis.password}")
+ private String password;
+
+
+ @Bean
+ public RedissonClient getRedisson() {
+ if (StringUtils.isBlank(host)) {
+ log.warn("getRedisson redis param is null,don't need to init redissonClient");
+ return null;
+ }
+
+ try {
+ Config config = new Config();
+ config.setCodec(new JsonJacksonCodec());
+ config.setThreads(NumConstant.FOUR);
+ config.setNettyThreads(NumConstant.FOUR);
+ //redis://ip:port
+ //redis的部署方式有单节点部署、主从方式部署、哨兵方式部署、集群方式部署
+ config.useSingleServer().setAddress("redis://".concat(host).concat(StrConstant.COLON).concat(port));
+ config.useSingleServer().setPassword(password);
+ config.useSingleServer().setConnectTimeout(NumConstant.ONE_THOUSAND * NumConstant.FIVE);
+ config.useSingleServer().setDatabase(NumConstant.TEN);
+ return Redisson.create(config);
+ } catch (Exception e) {
+ log.error("初始化redisson失败", e);
+ return null;
+ }
+
+ }
+
+}
\ No newline at end of file
diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/logback-spring.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/logback-spring.xml
index 99ae63af58..f099678400 100644
--- a/epmet-module/data-statistical/data-statistical-server/src/main/resources/logback-spring.xml
+++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/logback-spring.xml
@@ -149,6 +149,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/epmet-module/data-statistical/data-statistical-server/src/test/java/com/epmet/stats/test/RedissonTest.java b/epmet-module/data-statistical/data-statistical-server/src/test/java/com/epmet/stats/test/RedissonTest.java
new file mode 100644
index 0000000000..6f01774eab
--- /dev/null
+++ b/epmet-module/data-statistical/data-statistical-server/src/test/java/com/epmet/stats/test/RedissonTest.java
@@ -0,0 +1,61 @@
+package com.epmet.stats.test;
+
+import com.epmet.DataStatsApplication;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * desc:redisson测试类
+ */
+@Slf4j
+@RunWith(value = SpringRunner.class)
+@SpringBootTest(classes = {DataStatsApplication.class})
+public class RedissonTest {
+
+ @Autowired
+ private RedissonClient redissonClient;
+
+ @Test
+ public void lockTest() {
+ //获取一个名为 lockName 的锁实例
+ RLock lock = redissonClient.getLock("lockName");
+ try {
+ // 尝试加锁(推荐使用)
+ // 参数1 等待时长 waitTime:5 等待时长是5秒 如果5秒内还获取不到锁 则返回false,
+ // 参数2 持有时长 leaseTime:5 持有锁时长超过5秒 就释放锁 此时如果继续lock.unlock()会抛出异常
+ // 参数3 时间单位
+ boolean bs = lock.tryLock(5, 6, TimeUnit.SECONDS);
+
+ //如果获取不到锁 会一直阻塞到着 直至获取到锁 不推荐使用
+ //lock.lock();
+
+ //异步方式
+ /* RFuture future = lock.lockAsync();
+ if (future.isSuccess()){
+ //todo something
+ }*/
+ if (bs) {
+ // 业务代码
+ System.out.println("进入业务代码: " + 123);
+ } else {
+ Thread.sleep(300);
+ }
+ } catch (Exception e) {
+ log.error("lockTest exception", e);
+ } finally {
+ //判断是否是当前线程 持有锁
+ if (lock.isHeldByCurrentThread()) {
+ lock.unlock();
+ }
+ }
+ }
+
+}