【问题标题】:System property suffix for use in PropertyPlaceholderConfigurer用于 PropertyPlaceholderConfigurer 的系统属性后缀
【发布时间】:2014-01-16 14:07:09
【问题描述】:

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

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} 的属性。

【问题讨论】:

  • 查看 Spring 配置文件。

标签: java spring


【解决方案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

【讨论】:

    【解决方案2】:

    用内容创建两个属性文件dev.propertiesprod.properties

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

    这是常见的 Spring 模式。

    【讨论】:

      猜你喜欢
      • 2016-06-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-14
      • 1970-01-01
      • 2019-04-19
      • 2015-10-28
      • 1970-01-01
      • 2013-06-30
      相关资源
      最近更新 更多