在PropertyPlaceholderConfigurer中使用的系统属性后缀

时间:2014-01-16 14:07:09

标签: java spring

我在不同环境中定义数据库属性时遇到问题。属性文件如下所示:

db.url-DEV=host1:port:con...
db.user-DEV=user1

db.url-PROD=host2:port:con...
db.user-PROD=user2

使用系统属性在服务器端设置后缀(-DEV,-PROD)。如何配置PropertyPlaceholderConfigurer以检查系统属性是否切换到正确的配置?如果未设置系统属性,则必须有默认值。

我尝试过类似的东西,但这不起作用:

${#{'db.url'+${systemEnvironmentVar}}}

PropertyConfigurer说'属性名称' db.url' + $ {systemEnvironmentVar}未找到。

2 个答案:

答案 0 :(得分:1)

只需使用嵌套表达式,例如真实项目:

<property name="username" value="${${ENV_NAME}database.username}" />
<property name="password" value="${${ENV_NAME}database.password}" /> 

其中ENV_NAME是系统属性。请注意,您必须在jvm参数中声明此变量。您还可以将默认ENV_NAME添加到您的媒体资源中:

ENV_NAME=dev

并配置propertyPlaceholder以覆盖系统属性:

<property name="searchSystemEnvironment" value="true" />
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />

有关此here

的更多信息

但您也可以使用spring profiles

答案 1 :(得分:0)

使用内容

创建两个属性文件dev.propertiesprod.properties
db.url=host1:port:con...
db.user=user1

这是常见的Spring模式。