fix(uboot-common): 修改redis配置类动态配置db
This commit is contained in:
@ -6,18 +6,29 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.SerializationFeature;
|
||||
import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
|
||||
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.data.redis.connection.RedisConnectionFactory;
|
||||
import org.springframework.data.redis.connection.RedisNode;
|
||||
import org.springframework.data.redis.connection.RedisSentinelConfiguration;
|
||||
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
|
||||
import org.springframework.data.redis.core.RedisOperations;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
|
||||
import org.springframework.data.redis.serializer.StringRedisSerializer;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import static java.util.stream.Collectors.toList;
|
||||
|
||||
/**
|
||||
* redis 配置
|
||||
@ -25,12 +36,58 @@ import java.nio.charset.StandardCharsets;
|
||||
* @author dino
|
||||
* @date 2021/2/19 19:29
|
||||
*/
|
||||
@Configuration
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
@ConditionalOnClass(RedisOperations.class)
|
||||
@EnableConfigurationProperties(RedisProperties.class)
|
||||
@RequiredArgsConstructor
|
||||
public class RedisLettuceConfig {
|
||||
@Bean
|
||||
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
|
||||
|
||||
private final RedisProperties redisProperties;
|
||||
|
||||
@Bean("idempotentRedisTemplate")
|
||||
@ConditionalOnProperty(name = "spring.redis.database.idempotent")
|
||||
public RedisTemplate<String, Object> idempotentRedisTemplate(@Value("${spring.redis.database.idempotent}") int idempotentDatabase) {
|
||||
return this.redisTemplate(this.getLettuceConnectionFactory(idempotentDatabase));
|
||||
}
|
||||
|
||||
@Bean("shardingRedisTemplate")
|
||||
@ConditionalOnProperty(name = "spring.redis.database.sharding")
|
||||
public RedisTemplate<String, Object> shardingRedisTemplate(@Value("${spring.redis.database.sharding}") int shardingDatabase) {
|
||||
return this.redisTemplate(this.getLettuceConnectionFactory(shardingDatabase));
|
||||
}
|
||||
|
||||
@Bean("cacheRedisTemplate")
|
||||
@ConditionalOnProperty(name = "spring.redis.database.cache")
|
||||
public RedisTemplate<String, Object> cacheRedisTemplate(@Value("${spring.redis.database.cache}") int cacheDatabase) {
|
||||
return this.redisTemplate(this.getLettuceConnectionFactory(cacheDatabase));
|
||||
}
|
||||
|
||||
@Bean("backupRedisTemplate")
|
||||
@ConditionalOnProperty(name = "spring.redis.database.backup")
|
||||
public RedisTemplate<String, Object> backupRedisTemplate(@Value("${spring.redis.database.backup}") int backupDatabase) {
|
||||
return this.redisTemplate(this.getLettuceConnectionFactory(backupDatabase));
|
||||
}
|
||||
|
||||
private LettuceConnectionFactory getLettuceConnectionFactory(Integer db) {
|
||||
LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(this.sentinelConfig());
|
||||
lettuceConnectionFactory.setDatabase(db);
|
||||
lettuceConnectionFactory.afterPropertiesSet();
|
||||
return lettuceConnectionFactory;
|
||||
}
|
||||
|
||||
private RedisSentinelConfiguration sentinelConfig() {
|
||||
RedisSentinelConfiguration sentinelConfig = new RedisSentinelConfiguration();
|
||||
sentinelConfig.setMaster(redisProperties.getSentinel().getMaster());
|
||||
List<RedisNode> nodes = redisProperties.getSentinel().getNodes().stream().map(hostAndPort -> {
|
||||
String[] args = StringUtils.split(hostAndPort, ":");
|
||||
return new RedisNode(Objects.requireNonNull(args)[0], Integer.parseInt(args[1]));
|
||||
}).collect(toList());
|
||||
sentinelConfig.setSentinels(nodes);
|
||||
sentinelConfig.setPassword(redisProperties.getPassword());
|
||||
return sentinelConfig;
|
||||
}
|
||||
|
||||
private RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
|
||||
RedisTemplate<String, Object> template = new RedisTemplate<>();
|
||||
template.setConnectionFactory(factory);
|
||||
|
||||
|
@ -14,6 +14,7 @@ import org.aspectj.lang.annotation.Before;
|
||||
import org.aspectj.lang.annotation.Pointcut;
|
||||
import org.aspectj.lang.reflect.MethodSignature;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@ -34,7 +35,8 @@ import java.util.concurrent.TimeUnit;
|
||||
@Aspect
|
||||
public class IdempotentAspect {
|
||||
|
||||
@Autowired
|
||||
@Autowired(required = false)
|
||||
@Qualifier("idempotentRedisTemplate")
|
||||
private RedisTemplate<String, Object> redisTemplate;
|
||||
|
||||
/**redis键值*/
|
||||
|
@ -19,6 +19,7 @@ import org.aspectj.lang.annotation.Before;
|
||||
import org.aspectj.lang.annotation.Pointcut;
|
||||
import org.aspectj.lang.reflect.MethodSignature;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.core.annotation.Order;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
|
||||
@ -45,7 +46,9 @@ public class RequestShardValueAspect {
|
||||
private KeyResolver keyResolver;
|
||||
@Autowired
|
||||
private ProcessService processService;
|
||||
@Autowired
|
||||
|
||||
@Autowired(required = false)
|
||||
@Qualifier("shardingRedisTemplate")
|
||||
private RedisTemplate<String, Object> redisTemplate;
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user