mirror of
https://gitee.com/dromara/sa-token.git
synced 2025-10-22 03:27:23 +08:00
发现了一些新的配置, 一并提交
This commit is contained in:
@@ -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();
|
||||
|
Reference in New Issue
Block a user