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.SerializationFeature;
|
||||||
import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
|
import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
|
||||||
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
|
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.ConditionalOnClass;
|
||||||
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||||
import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
|
import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
|
||||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.data.redis.connection.RedisConnectionFactory;
|
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.RedisOperations;
|
||||||
import org.springframework.data.redis.core.RedisTemplate;
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
|
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
|
||||||
import org.springframework.data.redis.serializer.StringRedisSerializer;
|
import org.springframework.data.redis.serializer.StringRedisSerializer;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import static java.util.stream.Collectors.toList;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* redis 配置
|
* redis 配置
|
||||||
@ -25,12 +36,58 @@ import java.nio.charset.StandardCharsets;
|
|||||||
* @author dino
|
* @author dino
|
||||||
* @date 2021/2/19 19:29
|
* @date 2021/2/19 19:29
|
||||||
*/
|
*/
|
||||||
@Configuration
|
@Configuration(proxyBeanMethods = false)
|
||||||
@ConditionalOnClass(RedisOperations.class)
|
@ConditionalOnClass(RedisOperations.class)
|
||||||
@EnableConfigurationProperties(RedisProperties.class)
|
@EnableConfigurationProperties(RedisProperties.class)
|
||||||
|
@RequiredArgsConstructor
|
||||||
public class RedisLettuceConfig {
|
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<>();
|
RedisTemplate<String, Object> template = new RedisTemplate<>();
|
||||||
template.setConnectionFactory(factory);
|
template.setConnectionFactory(factory);
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@ import org.aspectj.lang.annotation.Before;
|
|||||||
import org.aspectj.lang.annotation.Pointcut;
|
import org.aspectj.lang.annotation.Pointcut;
|
||||||
import org.aspectj.lang.reflect.MethodSignature;
|
import org.aspectj.lang.reflect.MethodSignature;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
import org.springframework.data.redis.core.RedisTemplate;
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@ -34,7 +35,8 @@ import java.util.concurrent.TimeUnit;
|
|||||||
@Aspect
|
@Aspect
|
||||||
public class IdempotentAspect {
|
public class IdempotentAspect {
|
||||||
|
|
||||||
@Autowired
|
@Autowired(required = false)
|
||||||
|
@Qualifier("idempotentRedisTemplate")
|
||||||
private RedisTemplate<String, Object> redisTemplate;
|
private RedisTemplate<String, Object> redisTemplate;
|
||||||
|
|
||||||
/**redis键值*/
|
/**redis键值*/
|
||||||
|
@ -19,6 +19,7 @@ import org.aspectj.lang.annotation.Before;
|
|||||||
import org.aspectj.lang.annotation.Pointcut;
|
import org.aspectj.lang.annotation.Pointcut;
|
||||||
import org.aspectj.lang.reflect.MethodSignature;
|
import org.aspectj.lang.reflect.MethodSignature;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
import org.springframework.core.annotation.Order;
|
import org.springframework.core.annotation.Order;
|
||||||
import org.springframework.data.redis.core.RedisTemplate;
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
|
|
||||||
@ -45,7 +46,9 @@ public class RequestShardValueAspect {
|
|||||||
private KeyResolver keyResolver;
|
private KeyResolver keyResolver;
|
||||||
@Autowired
|
@Autowired
|
||||||
private ProcessService processService;
|
private ProcessService processService;
|
||||||
@Autowired
|
|
||||||
|
@Autowired(required = false)
|
||||||
|
@Qualifier("shardingRedisTemplate")
|
||||||
private RedisTemplate<String, Object> redisTemplate;
|
private RedisTemplate<String, Object> redisTemplate;
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user