我遇到的问题可能非常独特。我在同一项目中有两个应用程序,使用两个不同的spring配置文件。
运行它们时,我会手动加载上下文
context = new ClassPathXmlApplicationContext("hal.context.xml");
context.registerShutdownHook();
,然后在每个文件中指定所需的spring上下文文件。
问题出在配置上,因为我在yaml文件中存储了两个配置文件。
我最好的解决方案是使用Spring Boot工具通过
在POJO中加载配置(它们具有相同的结构)。@org.springframework.context.annotation.Configuration("configuration")
@ConfigurationProperties
@EnableConfigurationProperties
和
@Bean
public static PropertySourcesPlaceholderConfigurer properties() {
PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer = new PropertySourcesPlaceholderConfigurer();
YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
yaml.setResources(new ClassPathResource("filename"));
propertySourcesPlaceholderConfigurer.setProperties(yaml.getObject());
return propertySourcesPlaceholderConfigurer;
}
我找不到以参数化方式加载配置的方法...是否有任何选项可以将其结合起来
<bean id="yamlProperties" class="org.springframework.beans.factory.config.YamlPropertiesFactoryBean">
<property name="resources" value="classpath:hal.config.yml"/>
</bean>
,而不是用作属性占位符<context:property-placeholder properties-ref="yamlProperties"/>
来找到一种通过配置自动生成POJO的方法。
提前谢谢
路卡
答案 0 :(得分:0)
您可以使用两个不同的前缀(每个配置文件一个)来分隔配置值:
@Bean
public static PropertySourcesPlaceholderConfigurer properties() {
PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer = new PropertySourcesPlaceholderConfigurer();
propertySourcesPlaceholderConfigurer.setPlaceholderPrefix("${app1:");
propertySourcesPlaceholderConfigurer.setPlaceholderSuffix("}");
YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
yaml.setResources(new ClassPathResource("app1_config_filename"));
propertySourcesPlaceholderConfigurer.setProperties(yaml.getObject());
return propertySourcesPlaceholderConfigurer;
}
@Bean
public static PropertySourcesPlaceholderConfigurer properties() {
PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer = new PropertySourcesPlaceholderConfigurer();
propertySourcesPlaceholderConfigurer.setPlaceholderPrefix("${app2:");
propertySourcesPlaceholderConfigurer.setPlaceholderSuffix("}");
YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
yaml.setResources(new ClassPathResource("app2_config_filename"));
propertySourcesPlaceholderConfigurer.setProperties(yaml.getObject());
return propertySourcesPlaceholderConfigurer;
}
然后将配置值注入到bean中时,您可以执行以下操作:
@Value("{$app1:myVal}")
String myVal;
和
@Value("{$app2:myVal}")
String myVal;
从app1和app2进入bean
希望这会有所帮助