【问题标题】:Does application.yml support environment variables?application.yml 是否支持环境变量?
【发布时间】:2014-05-26 11:28:34
【问题描述】:

我尝试在 application.yml 配置中使用环境变量,例如:

spring:
  main:
    show_banner: false

---

spring:
  profiles: production
server:
  address: $OPENSHIFT_DIY_IP
  port: $OPENSHIFT_DIY_PORT

但是环境变量没有被解析。我必须提供不同的符号吗?

在 Rails 中,您可以例如使用

唯一的选择是像这样运行应用程序:

java -jar my.jar --server.address=$OPENSHIFT_DIY_IP --server.port=$OPENSHIFT_DIY_PORT

【问题讨论】:

    标签: java spring yaml spring-boot


    【解决方案1】:

    试试${OPENSHIFT_DIY_PORT}(通常的 Spring 占位符符号)。有关文档,请参阅 here

    【讨论】:

    • 这正是我所需要的:app.name=MyApp app.description=${app.name} is a Spring Boot application
    • 只是指出 - 如果您使用的是 kotlin,您需要将您的引用放在引号中并转义 $ 例如 root: "\${LOGGING_LEVEL_ROOT:info}"
    • 伙计们,我们如何在启动应用程序时通过 unix cli 传递 OPENSHIFT_DIY_PORT?我知道我们可以使用 -D 来传递覆盖参数,但这也适用于环境变量吗?例如:nohup java -Xmx1024m -jar -Dspring.profiles.active="whatever"。有没有办法用 env vars 做到这一点?
    • @IgorDonin,变量赋值和程序的串联会为您调用一个选项吗?例如:$MY_ENV=value && java -jar ...
    【解决方案2】:

    如果没有提供环境变量,你甚至可以添加默认值:

    logging:
      level:
        root: ${LOGGING_LEVEL_ROOT:info}
    

    【讨论】:

    • 我在继承的应用程序中发现了这种语法,但一直无法找到显示这一点的 Spring 文档。正在发生的事情是相当明显的,但是能够找到它的文档会很好。谢谢你的分享——我现在对我的结论更有信心了。
    • 是在配置 UB 中使用 默认值 还是明确声明可能?
    • 这个语法链吗?有人可以做${MY_EXPECTED_VALUE:${${MY_ENV}_my_expected_prefix:default_value}} 会很高兴阅读有关此的文档
    • 我的默认值可以有分号吗?
    • 我发现这(以及公认的答案)也适用于 Micronaut 的 application.yml。
    猜你喜欢
    • 1970-01-01
    • 2021-09-05
    • 2017-04-17
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多