【问题标题】:How can you override a spring property in application.yml for a Spring Boot application using the docker run command?如何使用 docker run 命令为 Spring Boot 应用程序覆盖 application.yml 中的 spring 属性?
【发布时间】:2021-03-01 18:45:08
【问题描述】:

我有一个 dockerized spring boot 应用程序,其 application.yml 包含以下属性:

rest-template:
    connection-timeout: 1000
    read-timeout: 1000

现在假设我想在运行 docker run 命令时更新连接超时值。我知道其中一种方法是更新 application.yml 文件:

rest-template:
    connection-timeout: ${REST_CONNECTION_TIMEOUT:1000}
    read-timeout: ${REST_READ_TIMEOUT:1000}

然后我们可以运行docker run命令如下:

docker container run -d --name test-service -e REST_CONNECTION_TIMOUT=5000 test-service-img

但是如果我想更新它而不必在 application.yml 中使用 REST_CONNECTION_TIMOUT。

这个属性如何映射到 docker 命令中的 env 变量?

【问题讨论】:

  • 您可以在命令行上编写自定义运行命令,该命令将更新您的文件,例如sed 如果在启动 Spring Boot 应用程序之前可用。同时,干净的方式将是您在问题中使用 env vars 描述的方式,或者至少覆盖该文件以构建自定义图像。

标签: java spring-boot docker environment-variables application.properties


【解决方案1】:

您可以依赖 Spring Boot 的 relaxed binding - 它的功能之一是将环境变量映射到配置属性。

在你的情况下,你可以使用:

... -e RESTTEMPLATE_CONNECTIONTIMEOUT=5000 -e RESTTEMPLATE_READTIMEOUT=5000 ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-10
    • 2020-12-29
    • 1970-01-01
    • 2020-12-23
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多