【问题标题】:SpringBoot 2.1.3.RELEASE : Not able to read environment properties from application.propertiesSpring Boot 2.1.3.RELEASE:无法从 application.properties 读取环境属性
【发布时间】:2019-09-18 23:49:49
【问题描述】:

我正在尝试从我的 application.properties 中读取环境变量 domains.integrationService=${INTEGRATION_SERVICE_DOMAIN:http://localhost:1337}.

env 属性设置在我的 docker 容器中(已检查),但不知何故 spring 无法从 .properties 读取它。因此,它最终设置了http://localhost:1337

这在使用 2.0.0 版本的 SpringBoot 的其他项目中运行良好。

我认为他们放弃了这个功能。我不想在项目的.properties 中硬编码这些值。

我在 docker 中的 .env

INTEGRATION_SERVICE_DOMAIN=https://dummy.com

我的 Docker 运行命令

docker run -d -p 1100:1100 --restart unless-stopped --env-file ~/.env --network=\"host\" -v /var/log/dummy-project:/usr/src/app/logs -v /tmp:/usr/src/app/tmp --name dummy-project

如果有任何解决方案,请告诉我。

【问题讨论】:

  • 我怀疑 Spring 在物业管理等基础领域打破了向后兼容性。请提供更多详细信息,您如何在 docker 中设置道具、如何在应用程序中访问它们以及您想要实现的总体目标。
  • 添加说明。这不是码头化问题。当我在没有 docker 的情况下从本地运行应用程序时,属性不会读取 env 变量。

标签: java spring spring-boot docker environment-variables


【解决方案1】:

相信 Spring Boot 可以开箱即用地正确完成工作。

正如in the documentation 解释的那样,PropertySource 将首先读取属性文件,然后使用环境变量中的值覆盖加载的值(以及其他位置,请参阅文档了解所有可能性和优先顺序)。

所以如果你的 application.properties 包含:

domains.integrationService=http://localhost:1337

您可以通过设置一个类似命名的环境变量来覆盖这个“默认”值。在这个例子中,至少domains.integrationServiceDOMAINS_INTEGRATION_SERVICE 环境变量将被自动拾取以覆盖来自application.properties 的值。但它不会自行反转单词,所以INTEGRATION_SERVICE_DOMAIN 不起作用。

尝试(在 docker 之外)使用:

export DOMAINS_INTEGRATION_SERVICE=https://dummy.com

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    • 2017-08-31
    • 2014-12-11
    • 2020-07-08
    相关资源
    最近更新 更多