@PropertySource适配通配符加载到Environment的一种方案

@PropertySource可将配置文件加载到内存,时间有限说重点,@PropertySource注解有4个参数,其中value表示要加载文件的路径,这个参数不支持通配符。还有一个参数PropertySourceFactory是加载配置文件的工厂,这两个参数配合使用可以实现标题的功能,代码如下:

待加载的配置文件如下:

配置类如下:

@Configuration
@PropertySource(
        value = {"classpath:executePath/**_${mydemo.ymlparam:clickhouse}.properties"
        },
        encoding = "utf-8",
        factory = EngineSqlConfigSource.class,
        ignoreResourceNotFound = true
)
@Slf4j
public class EngineSqlConfig {
    @Autowired
    private Environment environment;
    
    //获取配置文件中参数
    public String getProperty(String key, String defaultValue) {
        return this.environment.getProperty(key, defaultValue);
    }
    public String getPropertyNotEmpty(String key) {
        String value = this.environment.getProperty(key);
        if (StringUtil.isEmpty(value)) {
            log.error("配置项未配置,{}",key);
            return value;
        } else {
            return value;
        }
    }
}

工厂类如下 

@Slf4j
public class EngineSqlConfigSource implements PropertySourceFactory {
    @Override
    public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {

        Properties props = new Properties();
        //按路径加载配置文件
        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        Resource[] resources = resolver.getResources(((ClassPathResource) resource.getResource()).getPath());

        if (ArrayUtil.isEmpty(resources)) {
            return new PropertiesPropertySource("mainInfo", props);
        }
        for (int i = 0; i < resources.length; i++) {
            PropertiesLoaderUtils.fillProperties(props, resources[i]);
        }
        PropertiesPropertySource propertiesPropertySource = new PropertiesPropertySource("mainInfo", props);
        return propertiesPropertySource;
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值