欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring boot war包引用外部配置文件

程序员文章站 2022-04-06 18:49:43
...

引用方法

由于不知道是否可以通过使用@PropertySource注解的形式,因而采用了网络中比较通用的代码形式
直接先上代码
1、不论是引用yml还是properties 都要编写一个类实现EnvironmentPostProcessor,但是两者解析的形式稍微有些不一样。
a、properties格式

 @Override
    public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
        File file = new File(configPath);
        if (file.exists()){
            MutablePropertySources propertySources = environment.getPropertySources();
            Properties properties = loadProperties(file);
            propertySources.addFirst(new PropertiesPropertySource("Config",properties));
        }
    }
    
    private Properties loadProperties(File file){
        FileSystemResource resource = new FileSystemResource(file);
        try{
            return PropertiesLoaderUtils.loadProperties(resource);
        }catch (IOException e){
            throw new IllegalStateException("Failed to load local settings from " + file.getAbsolutePath(),e);
        }
    }

b、yml格式

@Override
    public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
        File file = new File(configPath);
        if (file.exists()){
            FileSystemResource resource = new FileSystemResource(file);
            YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
            yaml.setResources(resource);
            MutablePropertySources propertySources = environment.getPropertySources();
            propertySources.addFirst(new PropertiesPropertySource("Config", yaml.getObject()));
        }
    }

2、引入Spring配置
在resouce下resources文件夹下创建一个文件夹名为META-INF,在里面创建一个spring.factories的文件
其中指定
org.springframework.boot.env.EnvironmentPostProcessor属性值为刚刚创建的类使用com.xxx.MyEnvironmentPostProcessor

原理

等待研究