@PropertySource分环境读取文件 factory定义读取文件

工作的时候写了一个redis底层工具jar包,因为环境不同导致redis的连接配置不同,所以在用@PropertySource,学习了分环境读取文件。
如果springboot项目比较简单直接加个占位符即可,但如果不是springboot项目,则需要用上自定义的factory

JedisSpringConfig.java 类

@Configuration
@PropertySource(value = {"classpath:redis-config-${spring.profiles.active:value}.properties"},factory = SystemPropertySourceFactory.class)
public class JedisSpringConfig {

    @Value("${redis.maxTotal}")
    private int maxTotal;

    @Value("${redis.maxIdle}")
    private int maxIdle;

    @Value("${redis.minIdle}")
    private int minIdle;

    @Value("${redis.maxWaitMillis}")
    private int maxWaitMillis;

    @Value("${redis.cluster.nodes}")
    private String nodes;

    @Value("${redis.connetcion.timeout}")
    private int connectionTimeout;

    @Value("${redis.connetcion.soTimeout}")
    private int soTimeout;

    @Value("${redis.connetcion.maxAttempts}")
    private int maxAttempts;

    @Value("${redis.common.key}")
    private String password;

    @Bean
    public GenericObjectPoolConfig getGenericObjectPoolConfig(){
        GenericObjectPoolConfig genericObjectPoolConfig=new GenericObjectPoolConfig();
        genericObjectPoolConfig.setTestOnBorrow(true);
        genericObjectPoolConfig.setMaxTotal(maxTotal);
        genericObjectPoolConfig.setMaxIdle(maxIdle);
        genericObjectPoolConfig.setMinIdle(minIdle);
        genericObjectPoolConfig.setMaxWaitMillis(maxWaitMillis);
        return genericObjectPoolConfig;
    }


    @Bean
    public JedisClusterConfig getJedisClusterConfig(){
        JedisClusterConfig jedisClusterConfig=new JedisClusterConfig();
        jedisClusterConfig.setNodes(nodes);
        jedisClusterConfig.setConnectionTimeout(connectionTimeout);
        jedisClusterConfig.setSoTimeout(soTimeout);
        jedisClusterConfig.setMaxAttempts(maxAttempts);
        jedisClusterConfig.setPassword(password);
        jedisClusterConfig.setPoolConfig(getGenericObjectPoolConfig());
        return jedisClusterConfig;
    }

    @Bean
    public JedisClusterUtil getJedisClusterUtil() throws Exception{
        JedisClusterUtil jedisClusterUtil=new JedisClusterUtil();
        jedisClusterUtil.setJedisCluster(getJedisClusterConfig().getObject());
        return jedisClusterUtil;
    }


}

如代码springboot只需要配置spring.profiles.active即可以区分环境,单要兼容spring 需要自定义配置,继承PropertySourceFactory

SystemPropertySourceFactory类

@Configuration
public class SystemPropertySourceFactory implements PropertySourceFactory  {




    @Override
    public PropertySource<?> createPropertySource(String name, EncodedResource encodedResource) throws IOException {
//判断是否被替换
        if(encodedResource.getResource().getFilename().contains("value")) {
            ResourceBundle configBudle = ResourceBundle.getBundle("spring-redis");
            String profile = configBudle.getString("spring.profile.redis");
            String fileName = encodedResource.getResource().getFilename().replace("value", profile);
            InputStream in2 = this.getClass().getResourceAsStream("/" + fileName);
            InputStreamResource inputStreamResource = new InputStreamResource(in2);
            return new ResourcePropertySource(new EncodedResource(inputStreamResource));
        }else {
            return new ResourcePropertySource(encodedResource);
        }
    }
}

这样就可以实现分环境读取文件了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值