千家信息网

springboot项目自定义读取多环境yml配置方法

发表于:2024-11-30 作者:千家信息网编辑
千家信息网最后更新 2024年11月30日,这篇文章主要讲解了"springboot项目自定义读取多环境yml配置方法",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"springboot项目自定义
千家信息网最后更新 2024年11月30日springboot项目自定义读取多环境yml配置方法

这篇文章主要讲解了"springboot项目自定义读取多环境yml配置方法",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"springboot项目自定义读取多环境yml配置方法"吧!

有一些支付相关的配置文件是在不想写到application里的。

不说原理了,网上一大堆。

1:直接上代码:

import lombok.extern.slf4j.Slf4j;import org.springframework.boot.SpringApplication;import org.springframework.boot.env.EnvironmentPostProcessor;import org.springframework.boot.env.PropertySourceLoader;import org.springframework.boot.env.YamlPropertySourceLoader;import org.springframework.core.env.ConfigurableEnvironment;import org.springframework.core.env.PropertySource;import org.springframework.core.io.Resource;import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import org.springframework.core.io.support.ResourcePatternResolver;import org.springframework.util.CollectionUtils;import org.springframework.util.ResourceUtils;import java.io.IOException;import java.util.List;/** * @version V1.0 * @description: 读取自定义的payment-*.yml的环境处理器(只读yml文件,其他文件忽略) * @author: SunF * @create: 2019-08-21 09:59 **/@Slf4jpublic class PaymentEnvironmentPostProcessor implements EnvironmentPostProcessor {    private final ResourcePatternResolver patternResolver = new PathMatchingResourcePatternResolver();    private final PropertySourceLoader propertySourceLoader;    public PaymentEnvironmentPostProcessor() {        super();        propertySourceLoader =  new YamlPropertySourceLoader();    }    @Override    public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {        String[] activeProfiles = environment.getActiveProfiles();        for (String activeProfile: activeProfiles){            String location = ResourceUtils.CLASSPATH_URL_PREFIX  + "paymentConfig/payment-"+activeProfile+ ".yml";            try{                Resource[] resourceArray = this.patternResolver.getResources(location);                for(Resource resource : resourceArray){                    List> propertySourceList = propertySourceLoader.load(resource.getFilename(), resource);                    if(! CollectionUtils.isEmpty(propertySourceList)){                        propertySourceList.stream().forEach(environment.getPropertySources() :: addLast);                    }                }            }catch(IOException e){                log.error("加载支付配置文件失败,因为{}", e.getMessage(), e);            }        }    }}

这里只读了yml文件,我们不需要其他文件,如果采用多种PropertySourceLoader进行扫描加载无疑增加了不必要的启动时间。

如果有需要可以将propertySourceLoader改为List,后续的环节在for循环中处理:

    private final List propertySourceLoaderList;    public PaymentEnvironmentPostProcessor() {        super();        this.propertySourceLoaderList = SpringFactoriesLoader.loadFactories(PropertySourceLoader.class,                getClass().getClassLoader());    }

2:添加spring.factories
在resources下添加META-INF文件夹,在旗下创建spring.factories文件,内容为:

org.springframework.boot.env.EnvironmentPostProcessor=com.xxx.xxx.config.PaymentEnvironmentPostProcessor

感谢各位的阅读,以上就是"springboot项目自定义读取多环境yml配置方法"的内容了,经过本文的学习后,相信大家对springboot项目自定义读取多环境yml配置方法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

0