fix redis
This commit is contained in:
23
pom.xml
23
pom.xml
@@ -162,6 +162,12 @@
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.postgresql</groupId>
|
||||
<artifactId>postgresql</artifactId>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.alibaba</groupId>
|
||||
<artifactId>druid-spring-boot-starter</artifactId>
|
||||
@@ -203,18 +209,25 @@
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-data-redis</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<!--<dependency>
|
||||
<groupId>org.redisson</groupId>
|
||||
<artifactId>redisson-spring-boot-starter</artifactId>
|
||||
<version>3.15.6</version>
|
||||
</dependency>
|
||||
</dependency>-->
|
||||
<dependency>
|
||||
<groupId>io.netty</groupId>
|
||||
<artifactId>netty-all</artifactId>
|
||||
</dependency>
|
||||
<!-- <dependency> <groupId>org.redisson</groupId> <artifactId>redisson-spring-data-21</artifactId>
|
||||
<version>3.11.0</version> </dependency> <dependency> <groupId>org.redisson</groupId>
|
||||
<artifactId>redisson</artifactId> <version>3.11.0</version> </dependency> -->
|
||||
<dependency>
|
||||
<groupId>org.redisson</groupId>
|
||||
<artifactId>redisson-spring-data-21</artifactId>
|
||||
<version>3.11.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.redisson</groupId>
|
||||
<artifactId>redisson</artifactId>
|
||||
<version>3.11.0</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>cn.hutool</groupId>
|
||||
|
||||
@@ -46,9 +46,5 @@ public class RedisConfig {
|
||||
return redisTemplate;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public RedissonUtils redissonUtils(RedissonClient redissonClient) {
|
||||
return new RedissonUtils(redissonClient);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,158 +1,158 @@
|
||||
//package com.newyetai.frame.redis.redisson;
|
||||
//
|
||||
//import com.newyetai.frame.redis.property.RedissonProperties;
|
||||
//import java.lang.reflect.Method;
|
||||
//import java.util.ArrayList;
|
||||
//import java.util.Arrays;
|
||||
//import java.util.List;
|
||||
//
|
||||
//import org.apache.commons.lang3.StringUtils;
|
||||
//import org.redisson.Redisson;
|
||||
//import org.redisson.api.RedissonClient;
|
||||
//import org.redisson.config.Config;
|
||||
package com.senmesh.frame.redis.redisson;
|
||||
|
||||
import com.senmesh.frame.redis.property.RedissonProperties;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.redisson.Redisson;
|
||||
import org.redisson.api.RedissonClient;
|
||||
import org.redisson.config.Config;
|
||||
import org.redisson.spring.data.connection.RedissonConnectionFactory;
|
||||
//import org.redisson.spring.data.connection.RedissonConnectionFactory;
|
||||
////import org.redisson.spring.data.connection.RedissonConnectionFactory;
|
||||
//import org.springframework.beans.factory.annotation.Autowired;
|
||||
//import org.springframework.boot.autoconfigure.AutoConfigureAfter;
|
||||
//import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
//import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
//import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
|
||||
//import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
|
||||
//import org.springframework.boot.autoconfigure.data.redis.RedisProperties.Sentinel;
|
||||
//import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
//import org.springframework.context.annotation.Bean;
|
||||
//import org.springframework.context.annotation.Configuration;
|
||||
//import org.springframework.context.annotation.Import;
|
||||
//import org.springframework.data.redis.connection.RedisConnectionFactory;
|
||||
//import org.springframework.data.redis.core.RedisOperations;
|
||||
//import org.springframework.data.redis.core.RedisTemplate;
|
||||
//import org.springframework.data.redis.core.StringRedisTemplate;
|
||||
//import org.springframework.util.ReflectionUtils;
|
||||
//
|
||||
///**
|
||||
// * 参考redisson-spring-boot-starter的RedissonAutoConfiguration,沿用redis配置,移除自定义配置文件解析配置
|
||||
// *
|
||||
// * @author sr on 2020-05-26
|
||||
// */
|
||||
//@Configuration
|
||||
//@ConditionalOnClass({Redisson.class, RedisOperations.class})
|
||||
//@AutoConfigureAfter({RedisAutoConfiguration.class})
|
||||
//@EnableConfigurationProperties({RedisProperties.class, RedissonProperties.class})
|
||||
//@Import({RedisAutoConfiguration.class})
|
||||
//public class RedissonConfig {
|
||||
//
|
||||
// @Autowired
|
||||
// private RedisProperties redisProperties;
|
||||
//
|
||||
// @Autowired
|
||||
// private RedissonProperties redissonProperties;
|
||||
//
|
||||
// @Bean
|
||||
// @ConditionalOnMissingBean(name = "redisTemplate")
|
||||
// public RedisTemplate<Object, Object> redisTemplate(
|
||||
// RedisConnectionFactory redisConnectionFactory) {
|
||||
// RedisTemplate<Object, Object> template = new RedisTemplate<Object, Object>();
|
||||
// template.setConnectionFactory(redisConnectionFactory);
|
||||
// return template;
|
||||
// }
|
||||
//
|
||||
// @Bean
|
||||
// @ConditionalOnMissingBean(StringRedisTemplate.class)
|
||||
// public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
|
||||
// StringRedisTemplate template = new StringRedisTemplate();
|
||||
// template.setConnectionFactory(redisConnectionFactory);
|
||||
// return template;
|
||||
// }
|
||||
//
|
||||
// @Bean
|
||||
// @ConditionalOnMissingBean(RedisConnectionFactory.class)
|
||||
// public RedissonConnectionFactory redissonConnectionFactory(RedissonClient redisson) {
|
||||
// return new RedissonConnectionFactory(redisson);
|
||||
// }
|
||||
//
|
||||
// @SuppressWarnings("unchecked")
|
||||
// @Bean(destroyMethod = "shutdown")
|
||||
// @ConditionalOnMissingBean(RedissonClient.class)
|
||||
// public RedissonClient redisson() {
|
||||
// Config config = null;
|
||||
// Method clusterMethod = ReflectionUtils.findMethod(RedisProperties.class, "getCluster");
|
||||
// Method timeoutMethod = ReflectionUtils.findMethod(RedisProperties.class, "getTimeout");
|
||||
// Object timeoutValue = ReflectionUtils.invokeMethod(timeoutMethod, redisProperties);
|
||||
// int timeout;
|
||||
// if (null == timeoutValue) {
|
||||
// timeout = 0;
|
||||
// } else if (!(timeoutValue instanceof Integer)) {
|
||||
// Method millisMethod = ReflectionUtils.findMethod(timeoutValue.getClass(), "toMillis");
|
||||
// timeout = ((Long) ReflectionUtils.invokeMethod(millisMethod, timeoutValue)).intValue();
|
||||
// } else {
|
||||
// timeout = (Integer) timeoutValue;
|
||||
// }
|
||||
//
|
||||
// // 修复不设置密码,传入空字符串,置为空
|
||||
// String password = redisProperties.getPassword();
|
||||
// password = StringUtils.isBlank(password) ? null : password;
|
||||
// if (redisProperties.getSentinel() != null) {
|
||||
// Method nodesMethod = ReflectionUtils.findMethod(Sentinel.class, "getNodes");
|
||||
// Object nodesValue = ReflectionUtils.invokeMethod(nodesMethod, redisProperties.getSentinel());
|
||||
//
|
||||
// String[] nodes;
|
||||
// if (nodesValue instanceof String) {
|
||||
// nodes = convert(Arrays.asList(((String) nodesValue).split(",")));
|
||||
// } else {
|
||||
// nodes = convert((List<String>) nodesValue);
|
||||
// }
|
||||
//
|
||||
// config = new Config();
|
||||
// config.useSentinelServers()
|
||||
// .setPingConnectionInterval(redissonProperties.getPingConnectionInterval())
|
||||
// .setMasterName(redisProperties.getSentinel().getMaster())
|
||||
// .addSentinelAddress(nodes).setDatabase(redisProperties.getDatabase())
|
||||
// .setConnectTimeout(timeout).setPassword(password);
|
||||
// } else if (clusterMethod != null
|
||||
// && ReflectionUtils.invokeMethod(clusterMethod, redisProperties) != null) {
|
||||
// Object clusterObject = ReflectionUtils.invokeMethod(clusterMethod, redisProperties);
|
||||
// Method nodesMethod = ReflectionUtils.findMethod(clusterObject.getClass(), "getNodes");
|
||||
// List<String> nodesObject = (List<String>) ReflectionUtils.invokeMethod(nodesMethod, clusterObject);
|
||||
//
|
||||
// String[] nodes = convert(nodesObject);
|
||||
//
|
||||
// config = new Config();
|
||||
// config.useClusterServers()
|
||||
// .setPingConnectionInterval(redissonProperties.getPingConnectionInterval())
|
||||
// .addNodeAddress(nodes).setConnectTimeout(timeout)
|
||||
// .setPassword(password);
|
||||
// } else {
|
||||
// config = new Config();
|
||||
// String prefix = "redis://";
|
||||
// Method method = ReflectionUtils.findMethod(RedisProperties.class, "isSsl");
|
||||
// if (method != null && (Boolean) ReflectionUtils.invokeMethod(method, redisProperties)) {
|
||||
// prefix = "rediss://";
|
||||
// }
|
||||
//
|
||||
// config.useSingleServer()
|
||||
// .setPingConnectionInterval(redissonProperties.getPingConnectionInterval())
|
||||
// .setAddress(prefix + redisProperties.getHost() + ":" + redisProperties.getPort())
|
||||
// .setConnectTimeout(timeout).setDatabase(redisProperties.getDatabase())
|
||||
// .setPassword(password);
|
||||
// }
|
||||
// return Redisson.create(config);
|
||||
// }
|
||||
//
|
||||
// private String[] convert(List<String> nodesObject) {
|
||||
// List<String> nodes = new ArrayList<String>(nodesObject.size());
|
||||
// for (String node : nodesObject) {
|
||||
// if (!node.startsWith("redis://") && !node.startsWith("rediss://")) {
|
||||
// nodes.add("redis://" + node);
|
||||
// } else {
|
||||
// nodes.add(node);
|
||||
// }
|
||||
// }
|
||||
// return nodes.toArray(new String[nodes.size()]);
|
||||
// }
|
||||
//
|
||||
// @Bean
|
||||
// public RedissonUtils redissonUtils() {
|
||||
// return new RedissonUtils(redisson());
|
||||
// }
|
||||
//
|
||||
//}
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
|
||||
import org.springframework.boot.autoconfigure.data.redis.RedisProperties.Sentinel;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Import;
|
||||
import org.springframework.data.redis.connection.RedisConnectionFactory;
|
||||
import org.springframework.data.redis.core.RedisOperations;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
import org.springframework.data.redis.core.StringRedisTemplate;
|
||||
import org.springframework.util.ReflectionUtils;
|
||||
|
||||
/**
|
||||
* 参考redisson-spring-boot-starter的RedissonAutoConfiguration,沿用redis配置,移除自定义配置文件解析配置
|
||||
*
|
||||
* @author sr on 2020-05-26
|
||||
*/
|
||||
@Configuration
|
||||
@ConditionalOnClass({Redisson.class, RedisOperations.class})
|
||||
@AutoConfigureAfter({RedisAutoConfiguration.class})
|
||||
@EnableConfigurationProperties({RedisProperties.class, RedissonProperties.class})
|
||||
@Import({RedisAutoConfiguration.class})
|
||||
public class RedissonConfig {
|
||||
|
||||
@Autowired
|
||||
private RedisProperties redisProperties;
|
||||
|
||||
@Autowired
|
||||
private RedissonProperties redissonProperties;
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean(name = "redisTemplate")
|
||||
public RedisTemplate<Object, Object> redisTemplate(
|
||||
RedisConnectionFactory redisConnectionFactory) {
|
||||
RedisTemplate<Object, Object> template = new RedisTemplate<Object, Object>();
|
||||
template.setConnectionFactory(redisConnectionFactory);
|
||||
return template;
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean(StringRedisTemplate.class)
|
||||
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
|
||||
StringRedisTemplate template = new StringRedisTemplate();
|
||||
template.setConnectionFactory(redisConnectionFactory);
|
||||
return template;
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean(RedisConnectionFactory.class)
|
||||
public RedissonConnectionFactory redissonConnectionFactory(RedissonClient redisson) {
|
||||
return new RedissonConnectionFactory(redisson);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Bean(destroyMethod = "shutdown")
|
||||
@ConditionalOnMissingBean(RedissonClient.class)
|
||||
public RedissonClient redisson() {
|
||||
Config config = null;
|
||||
Method clusterMethod = ReflectionUtils.findMethod(RedisProperties.class, "getCluster");
|
||||
Method timeoutMethod = ReflectionUtils.findMethod(RedisProperties.class, "getTimeout");
|
||||
Object timeoutValue = ReflectionUtils.invokeMethod(timeoutMethod, redisProperties);
|
||||
int timeout;
|
||||
if (null == timeoutValue) {
|
||||
timeout = 0;
|
||||
} else if (!(timeoutValue instanceof Integer)) {
|
||||
Method millisMethod = ReflectionUtils.findMethod(timeoutValue.getClass(), "toMillis");
|
||||
timeout = ((Long) ReflectionUtils.invokeMethod(millisMethod, timeoutValue)).intValue();
|
||||
} else {
|
||||
timeout = (Integer) timeoutValue;
|
||||
}
|
||||
|
||||
// 修复不设置密码,传入空字符串,置为空
|
||||
String password = redisProperties.getPassword();
|
||||
password = StringUtils.isBlank(password) ? null : password;
|
||||
if (redisProperties.getSentinel() != null) {
|
||||
Method nodesMethod = ReflectionUtils.findMethod(Sentinel.class, "getNodes");
|
||||
Object nodesValue = ReflectionUtils.invokeMethod(nodesMethod, redisProperties.getSentinel());
|
||||
|
||||
String[] nodes;
|
||||
if (nodesValue instanceof String) {
|
||||
nodes = convert(Arrays.asList(((String) nodesValue).split(",")));
|
||||
} else {
|
||||
nodes = convert((List<String>) nodesValue);
|
||||
}
|
||||
|
||||
config = new Config();
|
||||
config.useSentinelServers()
|
||||
.setPingConnectionInterval(redissonProperties.getPingConnectionInterval())
|
||||
.setMasterName(redisProperties.getSentinel().getMaster())
|
||||
.addSentinelAddress(nodes).setDatabase(redisProperties.getDatabase())
|
||||
.setConnectTimeout(timeout).setPassword(password);
|
||||
} else if (clusterMethod != null
|
||||
&& ReflectionUtils.invokeMethod(clusterMethod, redisProperties) != null) {
|
||||
Object clusterObject = ReflectionUtils.invokeMethod(clusterMethod, redisProperties);
|
||||
Method nodesMethod = ReflectionUtils.findMethod(clusterObject.getClass(), "getNodes");
|
||||
List<String> nodesObject = (List<String>) ReflectionUtils.invokeMethod(nodesMethod, clusterObject);
|
||||
|
||||
String[] nodes = convert(nodesObject);
|
||||
|
||||
config = new Config();
|
||||
config.useClusterServers()
|
||||
.setPingConnectionInterval(redissonProperties.getPingConnectionInterval())
|
||||
.addNodeAddress(nodes).setConnectTimeout(timeout)
|
||||
.setPassword(password);
|
||||
} else {
|
||||
config = new Config();
|
||||
String prefix = "redis://";
|
||||
Method method = ReflectionUtils.findMethod(RedisProperties.class, "isSsl");
|
||||
if (method != null && (Boolean) ReflectionUtils.invokeMethod(method, redisProperties)) {
|
||||
prefix = "rediss://";
|
||||
}
|
||||
|
||||
config.useSingleServer()
|
||||
.setPingConnectionInterval(redissonProperties.getPingConnectionInterval())
|
||||
.setAddress(prefix + redisProperties.getHost() + ":" + redisProperties.getPort())
|
||||
.setConnectTimeout(timeout).setDatabase(redisProperties.getDatabase())
|
||||
.setPassword(password);
|
||||
}
|
||||
return Redisson.create(config);
|
||||
}
|
||||
|
||||
private String[] convert(List<String> nodesObject) {
|
||||
List<String> nodes = new ArrayList<String>(nodesObject.size());
|
||||
for (String node : nodesObject) {
|
||||
if (!node.startsWith("redis://") && !node.startsWith("rediss://")) {
|
||||
nodes.add("redis://" + node);
|
||||
} else {
|
||||
nodes.add(node);
|
||||
}
|
||||
}
|
||||
return nodes.toArray(new String[nodes.size()]);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public RedissonUtils redissonUtils() {
|
||||
return new RedissonUtils(redisson());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -2,4 +2,5 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
|
||||
com.senmesh.common.CommonConfiguration,\
|
||||
com.senmesh.codegenerator.config.CodeConfiguration,\
|
||||
com.senmesh.frame.redis.config.RedisCacheConfig,\
|
||||
com.senmesh.frame.redis.redisson.RedissonConfig,\
|
||||
com.senmesh.mq.config.RabbitMqConfiguration
|
||||
Reference in New Issue
Block a user