我在不同环境中定义数据库属性时遇到问题。属性文件如下所示:
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} 的属性”。
最佳答案
只需使用嵌套表达式,来自真实项目的示例:
<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
关于java - 用于 PropertyPlaceholderConfigurer 的系统属性后缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21164011/