Skip to content

Commit 53485ff

Browse files
authored
Merge pull request #1 from TaXueWWL/dev
Dev
2 parents ac8d8ee + 2d55692 commit 53485ff

File tree

11 files changed

+181
-64
lines changed

11 files changed

+181
-64
lines changed

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ redis-distributed-lock-demo-spring   redis-distributed-lock-core 调
1313

1414
## 文档
1515
### springboot应用(直接编程方式)
16+
0. 配置文件application.properties中引入
17+
18+
redisson.lock.server.address=127.0.0.1:6379
19+
redisson.lock.server.type=standalone
20+
1621
1. 针对springboot应用只需要引入依赖
1722

1823
<!--分布式锁redisson版本-->
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# 开分支到dev
Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,37 @@
1-
package com.snowalker.executor;
2-
3-
import com.snowalker.lock.redisson.RedissonLock;
4-
import org.slf4j.Logger;
5-
import org.slf4j.LoggerFactory;
6-
import org.springframework.beans.factory.annotation.Autowired;
7-
import org.springframework.scheduling.annotation.Scheduled;
8-
import org.springframework.stereotype.Component;
9-
10-
/**
11-
* @author wuwl@19pay.com.cn
12-
* @date 2018-7-9
13-
* @desc 纯java调用
14-
*/
15-
@Component
16-
public class ExecutorRedissonNormal {
17-
18-
private static final Logger LOGGER = LoggerFactory.getLogger(ExecutorRedissonNormal.class);
19-
20-
@Autowired
21-
RedissonLock redissonLock;
22-
23-
@Scheduled(cron = "${redis.lock.cron}")
24-
public void execute() throws InterruptedException {
25-
if (redissonLock.lock("redisson", 10)) {
26-
LOGGER.info("[ExecutorRedisson]--执行定时任务开始,休眠三秒");
27-
Thread.sleep(3000);
28-
System.out.println("=======================业务逻辑=============================");
29-
LOGGER.info("[ExecutorRedisson]--执行定时任务结束,休眠三秒");
30-
redissonLock.release("redisson");
31-
} else {
32-
LOGGER.info("[ExecutorRedisson]获取锁失败");
33-
}
34-
35-
}
36-
37-
}
1+
//package com.snowalker.executor;
2+
//
3+
//import com.snowalker.lock.redisson.RedissonLock;
4+
//import org.slf4j.Logger;
5+
//import org.slf4j.LoggerFactory;
6+
//import org.springframework.beans.factory.annotation.Autowired;
7+
//import org.springframework.scheduling.annotation.Scheduled;
8+
//import org.springframework.stereotype.Component;
9+
//
10+
///**
11+
// * @author wuwl@19pay.com.cn
12+
// * @date 2018-7-9
13+
// * @desc 纯java调用
14+
// */
15+
//@Component
16+
//public class ExecutorRedissonNormal {
17+
//
18+
// private static final Logger LOGGER = LoggerFactory.getLogger(ExecutorRedissonNormal.class);
19+
//
20+
// @Autowired
21+
// RedissonLock redissonLock;
22+
//
23+
// @Scheduled(cron = "${redis.lock.cron}")
24+
// public void execute() throws InterruptedException {
25+
// if (redissonLock.lock("redisson", 10)) {
26+
// LOGGER.info("[ExecutorRedisson]--执行定时任务开始,休眠三秒");
27+
// Thread.sleep(3000);
28+
// System.out.println("=======================业务逻辑=============================");
29+
// LOGGER.info("[ExecutorRedisson]--执行定时任务结束,休眠三秒");
30+
// redissonLock.release("redisson");
31+
// } else {
32+
// LOGGER.info("[ExecutorRedisson]获取锁失败");
33+
// }
34+
//
35+
// }
36+
//
37+
//}

redis-distributed-lock-starter-demo/src/main/resources/application.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,5 @@ redis.lock.cron=0/5 * * * * ?
2222
# redisson分布式锁配置
2323
#
2424
#########################################################################
25-
redisson.server.host=127.0.0.1
26-
redisson.server.port=6379
25+
redisson.lock.server.address=127.0.0.1:6379
26+
redisson.lock.server.type=standalone
Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,14 @@
1-
redisson.server.host=127.0.0.1
2-
redisson.server.ip=6379
1+
########################################################################
2+
#
3+
# redisson分布式锁配置--单机
4+
#
5+
#########################################################################
6+
redisson.lock.server.address=127.0.0.1:6379
7+
redisson.lock.server.type=standalone
8+
########################################################################
9+
#
10+
# redisson分布式锁配置--哨兵
11+
#
12+
#########################################################################
13+
#redisson.server.address=127.0.0.1:6379
14+
#redisson.server.type=sentinel

redis-distributed-lock-starter/readme.md

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,22 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.snowalker.dem
66

77
## redis分布式锁starter--基于Redisson
88
### 配置文件
9-
redisson.server.host=127.0.0.1
10-
redisson.server.ip=6379
9+
redisson.lock.server.address=127.0.0.1:6379
10+
redisson.lock.server.type=standalone
11+
### 更新记录
12+
1. 改变配置方式,增加对不同Redis连接方式的支持
13+
<br/>去除以下方法RedissonManager(String redisIp, String redisPort)
14+
15+
public RedissonManager (String redisIp, String redisPort) {
16+
try {
17+
String redisAddr = new StringBuilder("redis://")
18+
.append(redisIp).append(":").append(redisPort)
19+
.toString();
20+
config.useSingleServer().setAddress(redisAddr);
21+
redisson = (Redisson) Redisson.create(config);
22+
LOGGER.info("初始化Redisson结束,redisAddress:" + redisAddr);
23+
} catch (Exception e) {
24+
LOGGER.error("Redisson init error", e);
25+
e.printStackTrace();
26+
}
27+
}

redis-distributed-lock-starter/src/main/java/com/snowalker/lock/redisson/RedissonLock.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public boolean lock(String lockName, long expireSeconds) {
3939
} catch (InterruptedException e) {
4040
LOGGER.error("获取Redisson分布式锁[异常],lockName=" + lockName, e);
4141
e.printStackTrace();
42+
return false;
4243
}
4344
return getLock;
4445
}

redis-distributed-lock-starter/src/main/java/com/snowalker/lock/redisson/RedissonManager.java

Lines changed: 52 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.snowalker.lock.redisson;
22

3+
import com.snowalker.lock.redisson.constant.RedisConnectionType;
34
import org.redisson.Redisson;
45
import org.redisson.config.Config;
56
import org.slf4j.Logger;
@@ -18,14 +19,12 @@ public class RedissonManager {
1819

1920
private Redisson redisson = null;
2021

21-
public RedissonManager (String redisIp, String redisPort) {
22+
public RedissonManager() {}
23+
24+
public RedissonManager (String connectionType, String address) {
2225
try {
23-
String redisAddr = new StringBuilder("redis://")
24-
.append(redisIp).append(":").append(redisPort)
25-
.toString();
26-
config.useSingleServer().setAddress(redisAddr);
26+
config = RedissonConfigFactory.getInstance().createConfig(connectionType, address);
2727
redisson = (Redisson) Redisson.create(config);
28-
LOGGER.info("初始化Redisson结束,redisAddress:" + redisAddr);
2928
} catch (Exception e) {
3029
LOGGER.error("Redisson init error", e);
3130
e.printStackTrace();
@@ -36,10 +35,57 @@ public Redisson getRedisson() {
3635
return redisson;
3736
}
3837

38+
/**
39+
* Redisson连接方式配置工厂
40+
*/
41+
static class RedissonConfigFactory {
42+
43+
private RedissonConfigFactory() {}
44+
45+
private static volatile RedissonConfigFactory factory = null;
46+
47+
private static final String REDIS_CONNECTION_PREFIX = "redis://";
48+
49+
public static RedissonConfigFactory getInstance() {
50+
if (factory == null) {
51+
synchronized (RedissonConfigFactory.class) {
52+
factory = new RedissonConfigFactory();
53+
}
54+
}
55+
return factory;
56+
}
57+
58+
private Config config = new Config();
59+
60+
/**
61+
* 根据连接类型及连接地址参数获取对应连接方式的配置
62+
* @param connectionType
63+
* @param address
64+
* @return Config
65+
*/
66+
Config createConfig(String connectionType, String address) {
67+
if (connectionType.equals(RedisConnectionType.STANDALONE.getConnection_type())) {
68+
try {
69+
String redisAddr = REDIS_CONNECTION_PREFIX + address;
70+
config.useSingleServer().setAddress(redisAddr);
71+
LOGGER.info("初始化standalone方式Config,redisAddress:" + redisAddr);
72+
} catch (Exception e) {
73+
LOGGER.error("standalone Redisson init error", e);
74+
e.printStackTrace();
75+
}
76+
return config;
77+
} else if (connectionType.equals(RedisConnectionType.SENTINEL.getConnection_type())) {
78+
return null;
79+
}
80+
throw new RuntimeException("创建Redisson连接Config失败!当前连接方式:" + connectionType);
81+
}
82+
}
3983

4084
public static void main(String[] args) {
4185
Config config = new Config();
4286
config.useSingleServer().setAddress("redis://127.0.0.1:6379");
4387
Redisson redisson = (Redisson) Redisson.create(config);
4488
}
4589
}
90+
91+

redis-distributed-lock-starter/src/main/java/com/snowalker/lock/redisson/config/RedissonAutoConfiguration.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,9 @@ public RedissonLock redissonLock(RedissonManager redissonManager) {
3939
@Order(value = 1)
4040
public RedissonManager redissonManager(RedissonProperties redissonProperties) {
4141
RedissonManager redissonManager =
42-
new RedissonManager(redissonProperties.getHost(), redissonProperties.getPort());
43-
LOGGER.info("[RedissonManager]组装完毕");
42+
new RedissonManager(redissonProperties.getType(), redissonProperties.getAddress());
43+
LOGGER.info("[RedissonManager]组装完毕,当前连接方式:" + redissonProperties.getType() +
44+
",连接地址:" + redissonProperties.getAddress());
4445
return redissonManager;
4546
}
4647
}

redis-distributed-lock-starter/src/main/java/com/snowalker/lock/redisson/config/RedissonProperties.java

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,27 +7,27 @@
77
* @date 2018/7/10
88
* @desc Redisson配置映射类
99
*/
10-
@ConfigurationProperties(prefix = "redisson.server")
10+
@ConfigurationProperties(prefix = "redisson.lock.server")
1111
public class RedissonProperties {
1212

13-
/**单节点redis主机*/
14-
private String host;
15-
/**单节点redis端口*/
16-
private String port;
13+
/**redis主机地址,ip:port,有多个用半角逗号分隔*/
14+
private String address;
15+
/**连接类型,支持standalone-单机节点,sentinel-哨兵,cluster-集群,masterslave-主从*/
16+
private String type;
1717

18-
public String getHost() {
19-
return host;
18+
public String getAddress() {
19+
return address;
2020
}
2121

22-
public void setHost(String host) {
23-
this.host = host;
22+
public void setAddress(String address) {
23+
this.address = address;
2424
}
2525

26-
public String getPort() {
27-
return port;
26+
public String getType() {
27+
return type;
2828
}
2929

30-
public void setPort(String port) {
31-
this.port = port;
30+
public void setType(String type) {
31+
this.type = type;
3232
}
3333
}

0 commit comments

Comments
 (0)