【问题标题】:spring boot YAML default and environment variable override like HOCON filesspring boot YAML 默认和环境变量覆盖,如 HOCON 文件
【发布时间】:2017-11-04 05:42:22
【问题描述】:

spring-boot YAML 文件中是否有一种方法可以与 HOCON 文件中的相同,您可以在其中使用默认值并能够使用如下环境变量覆盖它:

basedir = "/whatever/whatever"
basedir = ${?FORCED_BASEDIR}

在这种情况下,在 HOCON 中,如果您未定义名为 FORCED_BASEDIR 的环境变量,则 basedir 将为“/whatever/whatever”,但如果您这样做,则 basedir 的值将是环境变量中定义的任何值。

谢谢

所以根据下面的 webdizz 回答,我查了一下,在“Spring Boot in Action”一书中找到了很好的描述。这是层次结构:

事实上,有几种方法可以为 Spring Boot 应用程序设置属性。春天 Boot 会从多个属性源中提取属性,包括:

  1. 命令行参数
  2. 来自 java:comp/env 的 JNDI 属性
  3. JVM 系统属性
  4. 操作系统环境变量
  5. 为以 random.* 为前缀的属性随机生成的值(参考 设置其他属性时,例如`${random.long})
  6. 应用程序外部的 application.properties 或 application.yml 文件 授权给 Thomas Snead 58 第 3 章自定义配置
  7. 一个 application.properties 或 application.yml 文件打包在 应用
  8. @PropertySource 指定的属性源
  9. 默认属性

【问题讨论】:

    标签: spring-boot


    【解决方案1】:

    Spring Boot 提供了多层次定义变量的方法,支持你的情况,你只需要通过以下方式定义变量:

    application.yml 中:

    basedir: "/whatever/whatever"
    

    在环境中:

    export BASEDIR = "/another/whatever"
    

    然后在运行时应用程序将使用来自环境的值。

    更多详情请查看enter link description here

    【讨论】:

    • 实际上我想要做的是从命令行覆盖这个条目:spring:cloud:stream:firm:common:brokerUrl:localhost:9092 所以从你的链接这应该可以工作: --spring.cloud.stream.firm.common.brokerUrl=192.168.10.1:9092 作为命令行选项参数提供,但事实并非如此。你知道什么是正确的语法吗?
    猜你喜欢
    • 2022-01-12
    • 1970-01-01
    • 2020-03-15
    • 2014-09-15
    • 1970-01-01
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多