Skip to content

Commit 5ae84ff

Browse files
committed
feat{add modle spring-boot-starter-redisson}
1. autoconfig 2. FailureAnalyzer 3. healthIndicator
1 parent 329239d commit 5ae84ff

8 files changed

Lines changed: 370 additions & 0 deletions

File tree

cloud-project-dependencies/pom.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
<mybatis-spring-boot-starter.version>1.1.1</mybatis-spring-boot-starter.version>
1515
<swagger2.version>2.4.0</swagger2.version>
1616
<jolokia.version>1.3.5</jolokia.version>
17+
<redisson.version>3.5.0</redisson.version>
1718
<cloud-common-exception.version>1.0-SNAPSHOT</cloud-common-exception.version>
1819
<cloud-common-mvc-custom.version>1.0-SNAPSHOT</cloud-common-mvc-custom.version>
1920
</properties>
@@ -34,6 +35,12 @@
3435
<artifactId>mybatis-spring-boot-starter</artifactId>
3536
<version>${mybatis-spring-boot-starter.version}</version>
3637
</dependency>
38+
<dependency>
39+
<groupId>org.redisson</groupId>
40+
<artifactId>redisson</artifactId>
41+
<version>${redisson.version}</version>
42+
</dependency>
43+
3744
<dependency>
3845
<groupId>org.jolokia</groupId>
3946
<artifactId>jolokia-core</artifactId>
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
7+
<artifactId> spring-boot-starter-redisson</artifactId>
8+
<packaging>jar</packaging>
9+
<name>spring-boot-starter-redisson</name>
10+
11+
<parent>
12+
<groupId>com.erdaoya</groupId>
13+
<artifactId>spring-cloud-example-parent</artifactId>
14+
<version>1.0-SNAPSHOT</version>
15+
</parent>
16+
<dependencies>
17+
<dependency>
18+
<groupId>org.redisson</groupId>
19+
<artifactId>redisson</artifactId>
20+
</dependency>
21+
</dependencies>
22+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.erdaoya.springcloud.boot.starter.redisson.annotation;
2+
3+
import com.erdaoya.springcloud.boot.starter.redisson.config.RedissonAutoConfiguration;
4+
import com.erdaoya.springcloud.boot.starter.redisson.config.RedissonHealthIndicator;
5+
import org.springframework.boot.actuate.health.AbstractHealthIndicator;
6+
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
7+
import org.springframework.context.annotation.Import;
8+
9+
import java.lang.annotation.*;
10+
11+
@Target({ElementType.TYPE})
12+
@Retention(RetentionPolicy.RUNTIME)
13+
@Documented
14+
@ConditionalOnClass(AbstractHealthIndicator.class)
15+
@Import({RedissonAutoConfiguration.class, RedissonHealthIndicator.class})
16+
public @interface EnableRedissionClient {
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package com.erdaoya.springcloud.boot.starter.redisson.config;
2+
3+
import org.redisson.Redisson;
4+
import org.redisson.api.RedissonClient;
5+
import org.redisson.config.ClusterServersConfig;
6+
import org.redisson.config.Config;
7+
import org.redisson.config.SentinelServersConfig;
8+
import org.redisson.config.SingleServerConfig;
9+
import org.springframework.beans.factory.annotation.Autowired;
10+
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
11+
import org.springframework.boot.context.properties.EnableConfigurationProperties;
12+
import org.springframework.context.annotation.Bean;
13+
import org.springframework.context.annotation.Configuration;
14+
15+
import java.util.List;
16+
17+
/**
18+
* @author zhaozhou
19+
*/
20+
@SuppressWarnings("SpringJavaAutowiringInspection")
21+
@Configuration
22+
@ConditionalOnClass({RedissonClient.class})
23+
@EnableConfigurationProperties({RedissonProperties.class})
24+
public class RedissonAutoConfiguration {
25+
26+
private final RedissonProperties redissionProperties;
27+
28+
@Autowired
29+
public RedissonAutoConfiguration(RedissonProperties redissionProperties) {
30+
this.redissionProperties = redissionProperties;
31+
}
32+
33+
34+
@Bean("redissonClient")
35+
public RedissonClient redissonClient() {
36+
Config config = new Config();
37+
//sentinel
38+
if (redissionProperties.getSentinel() != null) {
39+
SentinelServersConfig sentinelServersConfig = config.useSentinelServers();
40+
sentinelServersConfig.setMasterName(redissionProperties.getSentinel().getMaster());
41+
sentinelServersConfig.addSentinelAddress(redissionProperties.getSentinel().getNodes().split(","));
42+
sentinelServersConfig.setDatabase(redissionProperties.getDatabase());
43+
if (redissionProperties.getPassword() != null) {
44+
sentinelServersConfig.setPassword(redissionProperties.getPassword());
45+
}
46+
return Redisson.create(config);
47+
}
48+
// cluster
49+
if (redissionProperties.getCluster() != null) {
50+
ClusterServersConfig clusterServersConfig = config.useClusterServers();
51+
List<String> nodes = redissionProperties.getCluster().getNodes();
52+
for (String address : nodes) {
53+
clusterServersConfig.addNodeAddress(address);
54+
}
55+
Redisson.create(config);
56+
return Redisson.create(config);
57+
}
58+
// single redis
59+
SingleServerConfig singleServerConfig = config.useSingleServer();
60+
String schema = redissionProperties.isSsl() ? "rediss://" : "redis://";
61+
singleServerConfig.setAddress(schema + redissionProperties.getHost() + ":" + redissionProperties.getPort());
62+
singleServerConfig.setDatabase(redissionProperties.getDatabase());
63+
if (redissionProperties.getPassword() != null) {
64+
singleServerConfig.setPassword(redissionProperties.getPassword());
65+
}
66+
return Redisson.create(config);
67+
}
68+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.erdaoya.springcloud.boot.starter.redisson.config;
2+
3+
import org.springframework.beans.factory.BeanCreationException;
4+
import org.springframework.boot.diagnostics.AbstractFailureAnalyzer;
5+
import org.springframework.boot.diagnostics.FailureAnalysis;
6+
7+
/**
8+
* 17/8/27 上午1:08.
9+
*
10+
* @author zhaozhou
11+
*/
12+
public class RedissonCreateFailureAnalyzer extends AbstractFailureAnalyzer<BeanCreationException> {
13+
14+
@Override
15+
protected FailureAnalysis analyze(Throwable cause, BeanCreationException e) {
16+
String message = cause.getMessage();
17+
String description = message.trim();
18+
String action = "1. add config in application.properties/yml\n" +
19+
"2. add @EnableRedissionClient on main start class \n";
20+
return new FailureAnalysis(description, action, cause);
21+
}
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.erdaoya.springcloud.boot.starter.redisson.config;
2+
3+
import org.redisson.api.Node;
4+
import org.redisson.api.RedissonClient;
5+
import org.springframework.beans.factory.annotation.Autowired;
6+
import org.springframework.boot.actuate.health.AbstractHealthIndicator;
7+
import org.springframework.boot.actuate.health.Health;
8+
import org.springframework.stereotype.Component;
9+
10+
import java.util.Collection;
11+
12+
/**
13+
* 17/8/27 下午1:44.
14+
*
15+
* @author zhaozhou
16+
*/
17+
@Component("redisson")
18+
public class RedissonHealthIndicator extends AbstractHealthIndicator {
19+
@Autowired
20+
private RedissonClient redissonClient;
21+
22+
@Override
23+
protected void doHealthCheck(Health.Builder builder) throws Exception {
24+
try {
25+
Collection<Node> nodes = redissonClient.getNodesGroup().getNodes();
26+
String version = "Unknown";
27+
int nodeSize = 0;
28+
for (Node node : nodes) {
29+
nodeSize++;
30+
version = node.info(Node.InfoSection.SERVER).get("redis_version");
31+
}
32+
builder.up().withDetail("version", version).withDetail("nodeSize", nodeSize).build();
33+
} catch (Exception cause) {
34+
builder.down(cause).build();
35+
}
36+
}
37+
}
Lines changed: 195 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,195 @@
1+
package com.erdaoya.springcloud.boot.starter.redisson.config;
2+
3+
import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
4+
import org.springframework.boot.context.properties.ConfigurationProperties;
5+
6+
import java.util.List;
7+
8+
9+
@ConfigurationProperties(
10+
prefix = "spring.redisson"
11+
)
12+
public class RedissonProperties {
13+
private int database = 0;
14+
private String url;
15+
private String host = "localhost";
16+
private String password;
17+
private int port = 6379;
18+
private boolean ssl;
19+
private int timeout;
20+
private RedisProperties.Pool pool;
21+
private RedisProperties.Sentinel sentinel;
22+
private RedisProperties.Cluster cluster;
23+
public RedissonProperties() {
24+
}
25+
26+
public int getDatabase() {
27+
return this.database;
28+
}
29+
30+
public void setDatabase(int database) {
31+
this.database = database;
32+
}
33+
34+
public String getUrl() {
35+
return this.url;
36+
}
37+
38+
public void setUrl(String url) {
39+
this.url = url;
40+
}
41+
42+
public String getHost() {
43+
return this.host;
44+
}
45+
46+
public void setHost(String host) {
47+
this.host = host;
48+
}
49+
50+
public String getPassword() {
51+
return this.password;
52+
}
53+
54+
public void setPassword(String password) {
55+
this.password = password;
56+
}
57+
58+
public int getPort() {
59+
return this.port;
60+
}
61+
62+
public void setPort(int port) {
63+
this.port = port;
64+
}
65+
66+
public boolean isSsl() {
67+
return this.ssl;
68+
}
69+
70+
public void setSsl(boolean ssl) {
71+
this.ssl = ssl;
72+
}
73+
74+
public void setTimeout(int timeout) {
75+
this.timeout = timeout;
76+
}
77+
78+
public int getTimeout() {
79+
return this.timeout;
80+
}
81+
82+
public RedisProperties.Sentinel getSentinel() {
83+
return this.sentinel;
84+
}
85+
86+
public void setSentinel(RedisProperties.Sentinel sentinel) {
87+
this.sentinel = sentinel;
88+
}
89+
90+
public RedisProperties.Pool getPool() {
91+
return this.pool;
92+
}
93+
94+
public void setPool(RedisProperties.Pool pool) {
95+
this.pool = pool;
96+
}
97+
98+
public RedisProperties.Cluster getCluster() {
99+
return this.cluster;
100+
}
101+
102+
public void setCluster(RedisProperties.Cluster cluster) {
103+
this.cluster = cluster;
104+
}
105+
106+
public static class Sentinel {
107+
private String master;
108+
private String nodes;
109+
110+
public Sentinel() {
111+
}
112+
113+
public String getMaster() {
114+
return this.master;
115+
}
116+
117+
public void setMaster(String master) {
118+
this.master = master;
119+
}
120+
121+
public String getNodes() {
122+
return this.nodes;
123+
}
124+
125+
public void setNodes(String nodes) {
126+
this.nodes = nodes;
127+
}
128+
}
129+
130+
public static class Cluster {
131+
private List<String> nodes;
132+
private Integer maxRedirects;
133+
134+
public Cluster() {
135+
}
136+
137+
public List<String> getNodes() {
138+
return this.nodes;
139+
}
140+
141+
public void setNodes(List<String> nodes) {
142+
this.nodes = nodes;
143+
}
144+
145+
public Integer getMaxRedirects() {
146+
return this.maxRedirects;
147+
}
148+
149+
public void setMaxRedirects(Integer maxRedirects) {
150+
this.maxRedirects = maxRedirects;
151+
}
152+
}
153+
154+
public static class Pool {
155+
private int maxIdle = 8;
156+
private int minIdle = 0;
157+
private int maxActive = 8;
158+
private int maxWait = -1;
159+
160+
public Pool() {
161+
}
162+
163+
public int getMaxIdle() {
164+
return this.maxIdle;
165+
}
166+
167+
public void setMaxIdle(int maxIdle) {
168+
this.maxIdle = maxIdle;
169+
}
170+
171+
public int getMinIdle() {
172+
return this.minIdle;
173+
}
174+
175+
public void setMinIdle(int minIdle) {
176+
this.minIdle = minIdle;
177+
}
178+
179+
public int getMaxActive() {
180+
return this.maxActive;
181+
}
182+
183+
public void setMaxActive(int maxActive) {
184+
this.maxActive = maxActive;
185+
}
186+
187+
public int getMaxWait() {
188+
return this.maxWait;
189+
}
190+
191+
public void setMaxWait(int maxWait) {
192+
this.maxWait = maxWait;
193+
}
194+
}
195+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
org.springframework.boot.diagnostics.FailureAnalyzer=\
2+
com.erdaoya.springcloud.boot.starter.redisson.config.RedissonCreateFailureAnalyzer

0 commit comments

Comments
 (0)