我在spring遇到这个问题
<context:property-placeholder location="esb-project-config.properties"/>
但是不幸的是,我们不想在xml文件中使用它,因为我们想在测试中重新使用该文件,但要交换test.properties文件进行测试。即。我们要测试所有生产绑定,但是要使用适合于测试的属性,例如localhost。如何加载具有不同属性文件的ApplicationContext?
将property-placeholder配置放入额外的spring xml配置文件中。
例如:
applicationContext.xml
applicationContext-config.xml
testApplicationContext.xml
在Web App中,你可以使用此模式加载所有生产Spring上下文文件applicationContext*.xml。
applicationContext*.xml
对于测试,你仅需要加载,testApplicationContext.xml它将包括常规配置,但具有其他属性。
几种方法:
1.“Order”属性
在 src/main/resources/your-conf.xml
src/main/resources/your-conf.xml
<context:property-placeholder location="classpath:esb-project-config.properties" order="1"/>
在 src/test/resources/your-test-config.xml
src/test/resources/your-test-config.xml
<context:property-placeholder location="classpath:esb-project-config.properties" order="0"/>
如果你运行测试src/test/resources作为测试类路径,上面将确保覆盖src/main/resources/esb-project-config.properties用src/test/resources/esb-project-config.properties。
src/test/resources
src/main/resources/esb-project-config.properties用src/test/resources/esb-project-config.properties
property-placeholder但是,这将覆盖整个实例,因此你必须在此测试中提供应用程序所需的所有属性property-placeholder。例如
property-placeholder
<context:property-placeholder location="classpath:esb-project-config.properties, classpath:some-other-props-if-needed.properties" order="0"/>
<context:property-override location="classpath:esb-project-config.test.properties"/>
覆盖某些单独的属性。这里的一些例子
3.系统变量
你可以使用前缀来控制特定于环境的属性,这可以通过使用系统变量来完成:
<context:property-placeholder location="${ENV_SYSTEM:dev}/esb-project-config.properties"/>
在这种情况下,它将始终处于以下状态:
<context:property-placeholder location="dev/esb-project-config.properties"/>
默认情况下,除非ENV_SYSTEM设置了系统变量。qa例如,如果将其设置为,它将自动在以下位置查找:
ENV_SYSTEM
qa
<context:property-placeholder location="qa/esb-project-config.properties"/>
4.spring概况 另一种方法是使bean配置文件特定。例如:
<beans profile="dev"> <context:property-placeholder location="esb-project-config.dev.properties"/> </beans> <beans profile="qa"> <context:property-placeholder location="esb-project-config.qa.properties"/> </beans>
esb-project-config将根据配置文件集加载适当的文件。例如,这将加载esb-project-config.dev.properties:
esb-project-config
esb-project-config.dev.properties
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext(); ctx.getEnvironment().setActiveProfiles( "dev" ); ctx.load( "classpath:/org/boom/bang/config/xml/*-config.xml" ); ctx.refresh();