我正在尝试实现一个场景,我需要在单个JVM中的不同应用程序上下文中加载具有不同属性集的同一个类。
e.g。 (忽略小错误,这只是为了给出一个高层次的想法)
类别:
public class TestMe {
private String name;
public void setName(String name) {
this.name=name;
}
public String getName() {
return name;
}
}
我的属性文件应该是:
context1.prop.name=Hello
context2.prop.name=World
Bean定义类似于:
<beans>
<bean id="testMe" class="TestMe">
<property name="name" value="${prop.name}" />
</bean>
</beans>
因此,当加载context1时,所有以context1为前缀的属性都将用于构建上下文。
当加载context2时,所有以context2为前缀的属性都将用于构建上下文。
最后,我的应用程序中将包含2个上下文的地图,其中包含具有相同ID的bean。
我使用PropertyPlaceholderConfigurer实现了Spring的配置版本。但我想摆脱xmls并坚持使用注释。任何人都可以建议如何做到这一点。
答案 0 :(得分:0)
您可以将context1 / context2分隔为两个属性文件,并使用环境变量传递有关使用哪个文件的信息。然后你必须配置PropertySourcesPlaceholderConfigurer,如:
public static PropertySourcesPlaceholderConfigurer getPropertySourcesPlaceholderConfigurer() {
PropertySourcesPlaceholderConfigurer properties = new PropertySourcesPlaceholderConfigurer();
properties.setLocations(new ClassPathResource[]{
new ClassPathResource("config/"+System.getenv("env") + ".properties"),
});
return properties;
}
所以它将加载例如config / context1.properties文件。您可以在运行app时使用-Denv=context1
传递此变量。
第二个解决方案可以使用内置的配置文件和弹簧支持加载特定文件(例如,如果您使用&#39; test&#39;配置文件,它将自动为您加载application-test.properties)
第3名 - yaml支持 - 看看http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html