【问题标题】:Spring Boot properties that depend on profile-specific properties依赖于配置文件特定属性的 Spring Boot 属性
【发布时间】: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)和此处搜索了答案,但没有找到与我的特定问题相关的答案。

【问题讨论】:

    标签: java spring spring-boot application.properties spring-boot-configuration


    【解决方案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 文件中的属性。
    猜你喜欢
    • 2017-01-07
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 2019-06-28
    • 1970-01-01
    • 2017-08-18
    • 2016-07-12
    • 1970-01-01
    相关资源
    最近更新 更多