Spring的属性子集

时间:2014-06-19 14:54:28

标签: java spring

假设我有一个包含如下内容的属性文件:

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。

2 个答案:

答案 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>