java - 用于 PropertyPlaceholderConfigurer 的系统属性后缀

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

最佳答案

只需使用嵌套表达式,来自真实项目的示例:

<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/

相关文章:

java - 使用 servlet 过滤器修改请求参数

java - 在 Java 中以编程方式生成 Actionevent

java - 在 Hibernate 中同时使用@Column 和@Formula

java - JSF 2 自定义组件注释不起作用

spring - @RefreshScope 停止 @Scheduled 任务

java - Spring - 从项目结构加载文件夹作为目录?

java - 如何向 JTable 中的现有行添加新行

java - 自定义 SQL 查询以检查 GET-Request 中的列

java - 当我指定 spring.config.location 时,Spring Boot 2.x 不扫描 application.properties

java - 使用 kotlin for springmvc 无法实例化 bean 类数据类