假设我有一个包含如下内容的属性文件:
local.jndi.datasource = localDataSource
dev.jndi.datasource = devDataSource
test.jndi.datasource = testDataSource
prod.jndi.datasource = prodDataSource
我有称为“app.configDir”和“app.environment”的系统变量。 app.environment变量可以是“local”,“dev”,“test”或“prod”。
我想做的是这样的事情:
<context:property-placeholder location="file:#{systemProperties['app.configDir'] }/>
但是,我希望将属性缩小到环境变量中定义的子集。
在XML配置中有相对简单的方法吗?如果我能够使用编程配置,我可以想到几种方法。
编辑:目前正在使用Spring 3.1。
答案 0 :(得分:1)
从Spring 3.1开始,你应该能够使用弹簧轮廓。所以在你的配置中你可以有多个并放置
<beans profile="local">
<context:property-placeholder order="1" location="classpath*:META-INF/spring/some.properties"/>
</beans>
<beans profile="dev">
<context:property-placeholder order="1" location="classpath*:META-INF/spring/someOther.properties"/>
</beans>
有关使用Spring配置文件的完整示例,请参阅以下链接: http://java.dzone.com/articles/using-spring-profiles-xml
答案 1 :(得分:0)
在Spring 3.1中的XML中,你可以这样做:
<context-param>
<param-name>spring.profiles.default</param-name>
<param-value>${app.configDir}</param-value>
</context-param>
这将启用配置文件(dev / test / prod),但首先使用配置文件定义bean:
<beans profile="dev">
<jdbc:embedded-database id="dataSource">
<jdbc:script location="classpath:update.sql" />
</jdbc:embedded-database>
</beans>
<beans profile="qa">
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close"
p:url="jdbc:h2:tcp://dbserver/~/mydb"
p:driverClassName="org.h2.Driver"
p:username="sa"
p:password="password"
p:initialSize="20"
p:maxActive="30" />
</beans>