我在不同环境中定义数据库属性时遇到问题。属性文件如下所示:
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}未找到。
答案 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.properties
和prod.properties
db.url=host1:port:con...
db.user=user1
这是常见的Spring模式。