依赖于配置文件特定属性的 Spring Boot 属性

Posted

技术标签:

【中文标题】依赖于配置文件特定属性的 Spring Boot 属性【英文标题】:Spring Boot properties that depend on profile-specific properties 【发布时间】:2020-12-21 18:20:30 【问题描述】:

我有一个 Spring Boot 应用程序,它应该连接到 dev 和 prod 中的不同服务器,并且在这些服务器上运行许多服务。至此,我已经创建了这样的配置:

application.properties:

server.url.srv1=$server.url.base/srv1
server.url.srv2=$server.url.base/srv2
server.url.srv3=$server.url.base/srv3

应用程序-dev.properties:

server.url.base=http://192.168.86.17

应用程序-prod.properties:

server.url.base=https://10.11.12.3

然而,当我使用 @Value("$server.url.srv1") 初始化一个 bean 参数时,我得到一个字符串“$server.url.base/srv1”而不是“http://192.168.86.17/srv1”或“https:// /10.11.12.3/srv1" 符合预期。

这真的可行吗?如果仅在加载所有配置文件后才解析“$”引用,则应该是这样,但情况似乎并非如此。

我已经在Spring site、Google(它为我指出了另一个有用的Baeldung site)和此处搜索了答案,但没有找到与我的特定问题相关的答案。

【问题讨论】:

【参考方案1】:

application.properties 中的占位符应该可以工作。请参考我在您的用例中添加的示例项目,它按预期工作:https://github.com/itsprav/spring-profile-properties-using-placeholder

【讨论】:

我在你的项目中玩了一会儿,你是对的,在你的项目中这是可行的。我需要再次检查一下我是否没有做一些愚蠢的事情。 ...当然,事实证明我是(就是在做一些愚蠢的事情)。我为 dev 和 prod 配置文件定义了一个属性,但没有为测试定义一个属性,因此测试配置文件失败了。这就是我正在测试的配置文件。愚蠢的我......【参考方案2】:

当您运行您的应用程序时,您必须设置要设置的特定 spring-profile 才能获得之前定义的特定属性。

有很多方法可以设置这些配置文件。

Setting Profiles in different ways (JVM, Programmatically, Environment Variable...)

【讨论】:

我的问题不是如何选择配置文件。我的问题是,如何根据特定配置文件中定义的属性配置主 application.properties 文件中的属性。

以上是关于依赖于配置文件特定属性的 Spring Boot 属性的主要内容,如果未能解决你的问题,请参考以下文章

Spring boot:从文件系统加载配置文件特定的 application.properties

spring boot 外部配置 - profile 特定配置

嵌入式码头服务器的 Spring Boot 数据源特定属性

Spring Boot 属性配置和使用

Spring Boot集成Mybatis完整实例

spring boot 读取配置文件(application.yml)中的属性值111