发现了一些新的配置, 一并提交

This commit is contained in:
hjc
2023-01-09 13:31:57 +08:00
parent 46a98b8ad5
commit 0cf045e171
9 changed files with 505 additions and 24 deletions

View File

@@ -1,5 +1,7 @@
package cn.dev33.satoken.dao.alone;
import cn.dev33.satoken.dao.*;
import cn.dev33.satoken.exception.SaTokenException;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
@@ -14,13 +16,6 @@ import org.springframework.data.redis.connection.lettuce.LettuceClientConfigurat
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration;
import cn.dev33.satoken.dao.SaTokenDao;
import cn.dev33.satoken.dao.SaTokenDaoDefaultImpl;
import cn.dev33.satoken.dao.SaTokenDaoRedis;
import cn.dev33.satoken.dao.SaTokenDaoRedisFastjson;
import cn.dev33.satoken.dao.SaTokenDaoRedisFastjson2;
import cn.dev33.satoken.dao.SaTokenDaoRedisJackson;
import java.util.List;
import java.util.stream.Collectors;
@@ -59,25 +54,13 @@ public class SaAloneRedisInject implements EnvironmentAware{
// ------------------- 开始注入
// 获取cfg对象
// 获取cfg对象
RedisProperties cfg = Binder.get(environment).bind(ALONE_PREFIX, RedisProperties.class).get();
// 1. Redis配置
RedisConfiguration redisAloneConfig;
if (cfg.getCluster().getNodes().size() > 0) {
// 集群模式
RedisClusterConfiguration redisClusterConfig = new RedisClusterConfiguration();
redisClusterConfig.setUsername(cfg.getUsername());
redisClusterConfig.setPassword(cfg.getPassword());
RedisProperties.Cluster cluster = cfg.getCluster();
List<RedisNode> serverList = cluster.getNodes().stream().map(node -> {
String[] ipAndPort = node.split(":");
return new RedisNode(ipAndPort[0].trim(), Integer.parseInt(ipAndPort[1]));
}).collect(Collectors.toList());
redisClusterConfig.setClusterNodes(serverList);
redisClusterConfig.setMaxRedirects(cluster.getMaxRedirects());
redisAloneConfig = redisClusterConfig;
} else {
String pattern = environment.getProperty(ALONE_PREFIX + ".pattern", "single");
if (pattern.equals("single")) {
// 单体模式
RedisStandaloneConfiguration redisConfig = new RedisStandaloneConfiguration();
redisConfig.setHostName(cfg.getHost());
@@ -86,6 +69,63 @@ public class SaAloneRedisInject implements EnvironmentAware{
redisConfig.setPassword(RedisPassword.of(cfg.getPassword()));
redisConfig.setDatabase(cfg.getDatabase());
redisAloneConfig = redisConfig;
} else if (pattern.equals("cluster")){
// 普通集群模式
RedisClusterConfiguration redisClusterConfig = new RedisClusterConfiguration();
redisClusterConfig.setUsername(cfg.getUsername());
redisClusterConfig.setPassword(RedisPassword.of(cfg.getPassword()));
RedisProperties.Cluster cluster = cfg.getCluster();
List<RedisNode> serverList = cluster.getNodes().stream().map(node -> {
String[] ipAndPort = node.split(":");
return new RedisNode(ipAndPort[0].trim(), Integer.parseInt(ipAndPort[1]));
}).collect(Collectors.toList());
redisClusterConfig.setClusterNodes(serverList);
redisClusterConfig.setMaxRedirects(cluster.getMaxRedirects());
redisAloneConfig = redisClusterConfig;
} else if (pattern.equals("sentinel")) {
// 哨兵集群模式
RedisSentinelConfiguration redisSentinelConfiguration = new RedisSentinelConfiguration();
redisSentinelConfiguration.setDatabase(cfg.getDatabase());
redisSentinelConfiguration.setUsername(cfg.getUsername());
redisSentinelConfiguration.setPassword(RedisPassword.of(cfg.getPassword()));
RedisProperties.Sentinel sentinel = cfg.getSentinel();
redisSentinelConfiguration.setMaster(sentinel.getMaster());
redisSentinelConfiguration.setSentinelPassword(sentinel.getPassword());
List<RedisNode> serverList = sentinel.getNodes().stream().map(node -> {
String[] ipAndPort = node.split(":");
return new RedisNode(ipAndPort[0].trim(), Integer.parseInt(ipAndPort[1]));
}).collect(Collectors.toList());
redisSentinelConfiguration.setSentinels(serverList);
redisAloneConfig = redisSentinelConfiguration;
} else if (pattern.equals("socket")) {
// socket 连接单体 Redis
RedisSocketConfiguration redisSocketConfiguration = new RedisSocketConfiguration();
redisSocketConfiguration.setDatabase(cfg.getDatabase());
redisSocketConfiguration.setUsername(cfg.getUsername());
redisSocketConfiguration.setPassword(RedisPassword.of(cfg.getPassword()));
String socket = environment.getProperty(ALONE_PREFIX + ".socket", "");
redisSocketConfiguration.setSocket(socket);
redisAloneConfig = redisSocketConfiguration;
} else if (pattern.equals("aws")) {
// AWS ElastiCache
// AWS Redis 远程主机地址: String hoseName = "****.***.****.****.cache.amazonaws.com";
String hostName = cfg.getHost();
int port = cfg.getPort();
RedisStaticMasterReplicaConfiguration redisStaticMasterReplicaConfiguration = new RedisStaticMasterReplicaConfiguration(hostName, port);
redisStaticMasterReplicaConfiguration.setDatabase(cfg.getDatabase());
redisStaticMasterReplicaConfiguration.setUsername(cfg.getUsername());
redisStaticMasterReplicaConfiguration.setPassword(RedisPassword.of(cfg.getPassword()));
redisAloneConfig = redisStaticMasterReplicaConfiguration;
} else {
// 模式无法识别
throw new SaTokenException("SaToken 无法识别 Alone-Redis 配置的模式: " + pattern);
}
// 2. 连接池配置
@@ -112,7 +152,7 @@ public class SaAloneRedisInject implements EnvironmentAware{
if(lettuce.getShutdownTimeout() != null) {
builder.shutdownTimeout(lettuce.getShutdownTimeout());
}
// 创建Factory对象
// 创建Factory对象
LettuceClientConfiguration clientConfig = builder.poolConfig(poolConfig).build();
LettuceConnectionFactory factory = new LettuceConnectionFactory(redisAloneConfig, clientConfig);
factory.afterPropertiesSet();