SpringBoot - 从PropertySourcesPlaceholderConfigurer获取所有属性

时间:2018-06-05 07:40:26

标签: spring-boot properties yaml javabeans

在我的maven多模块 SpringBoot 应用程序中,我有一个模块,它有一个配置类,它加载我自己添加到PropertySourcesPlaceholderConfigurer bean的yml属性:

@Configuration
public class PropertiesConfig {

    public static final String ERROR_FILE_NAME = "errorMessages.yml";

    @Bean
    public PropertySourcesPlaceholderConfigurer properties() {
        final PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer = new PropertySourcesPlaceholderConfigurer();
        propertySourcesPlaceholderConfigurer.setPropertiesArray(errorPropertiesFromYamlFile()); //set the properties here
        return propertySourcesPlaceholderConfigurer;
    }

    @Bean
    public YamlPropertiesFactoryBean errorPropertiesFromYamlFile() {
        final YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
        yaml.setResources(new ClassPathResource(ERROR_FILE_NAME));
        return yaml;
    }

}

这是一个名为 web-config-module 的子模块。我有一个主要的可运行的 web-app-module ,它将 web-config-module 作为依赖项并导入每个与Spring相关的bean,组件等:

@SpringBootApplication
@Import(WebConfigApp.class)
public class WebApp extends SpringBootServletInitializer{

    public static void main(String[] args) {
        SpringApplication.run(ErsApplication.class, args);
    }

}

在这个主 web-app-module 中我还有一个配置java,它加载了新的yml属性:

@Configuration
public class WebAppPropertiesConfig extends PropertiesConfig {

    private PropertySourcesPlaceholderConfigurer properties;

    public SchedulerPropertiesConfig(PropertySourcesPlaceholderConfigurer properties) {
        this.properties = properties;
    }

    @Bean
    public YamlPropertiesFactoryBean otherPropertiesFromYamlFile() { //how to add this to properties??
        final YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
        yaml.setResources(new ClassPathResource("otherproperties.yml"));
        return yaml;
    }

}

如您所见,它从前一个配置类扩展,因此它具有所有方法,如PropertySourcesPlaceholderConfigurer properties()方法,但子类中的此方法不是 @Bean < / em>再见。

我想将这个新加载的otherProperties.yml放到已创建的PropertySourcesPlaceholderConfigurer properties中。但是没有类似 properties.addProperty 的方法。我看到这是背景中的数组,所以我无法添加新值。

我能做的是获取所有属性,将它们保存在一个新的数组中,该数组中还有一个地方,并将新加载的otherProperties添加到这个新数组中,然后再次设置PropertySourcesPlaceholderConfigurer中的属性,但是没有类似getAllProperties()

的方法

我该如何解决这个问题?

0 个答案:

没有答案