spring中的spi提供指定环境的redis配置

背景:提供一个spi的功能,由于需要支持不同环境连不同的redis,同时使用方也可能会用到自身应用的redis。因此,考虑让使用方配置一个指定的环境变量来初始化不同环境的redis配置。

具体实现步骤:

1.编写不同环境的properties文件,放丰META-INF目录下

2.分别编写配置类,如RedisDevConfig、RedisTestConfig

  • 在配置类上打上注解@ConfigurationProperties(prefix="spring.redis-dev")、@ConditionalOnProperty(name="使用方指定环境的参数",havingValue="环境参数值,如dev")
  • 在类中指定类,用于读取properties文件
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.PropertySourcesPlaceholderConfigurer;
import org.springframework.stereotype.Component;

@ConfigurationProperties(prefix="spring.redis-spi")
@ConditionalOnProperty(name="spring.redis-spi.env",havingValue="dev")
@Component
public class RedisDevConfig{
    @Bean
    public static PropertySourcesPlaceholderConfigurer placeholderConfigurer(){
        return new PropertySourcesPlaceholderConfigurer();
    }

    @Bean(name="redisSpiTemplate")
    public <T> RedisTemplate<String,T> redisSpiTemplate(){
        RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration();
        //按实际情况配置以下信息
        configuration.setHostName("");
        configuration.setPort();
        configuration.setPassword();
        configuration.setDatabase();
        //连接池配置
        GenericObjectPoolConfig genericObjectPoolConfig = new GenericObjectPoolConfig();
        genericObjectPoolConfig.setMaxWaitMillis(100);
        genericObjectPoolConfig.setMaxIdle(100);
        genericObjectPoolConfig.setMinIdle(100);
        //Lettuce Pool
        LettucePoolingClientConfiguration.LettucePoolingClientConfigurationBuilder builder = LettucePoolingClientConfiguration.builder();
        builder.poolConfit(genericObjectPoolConfig);
        builder.commandTimeout(100);
        LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory (configuration,builder.build());
        lettuceConnectionFactory.afterPropertiesSet();
        return createRedisTemplate(lettuceConnectionFactory);

    } 
    
private<T> RedisTemplate<String,T> createRedisTemplate(RedisConnectionFactory             redisConnectionFactory){
    RedisTemplate<String,T> redisTemplate = new RedisTemplate();
    redisTemplate.setConnectionFactory(redisConnectionFactory);
    RedisSerializer redisSerializer = redisTemplate.getStringSerializer();
    redisTemplate.setKeySerializer(redisSerializer);
    redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
    redisTemplate.setHashKeySerializer(redisSerializer);
    redisTemplate.setHashValueSerializer(new JdkSerializationRedisSerializer());
    return redisTemplate;
}
    
}
  • 在META-INF/spring.factories中加入以上配置类

3.使用方引入spi的jar包,如果使用方本身需要自己的redis配置,需要添加自己的配置类与spi中的redis配置相区分,否则会将只能使用spi中的redis.

4.使用方添加指定的配置参数,等启动时,spi中的redis的配置就会自动连接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值