当前位置: 首页 > 知识库问答 >
问题:

spring boot YAML默认值和环境变量重写,如HOCON文件

公胤运
2023-03-14

有没有办法在sping-boot YAML文件中执行与HOCON文件中相同的操作,您可以在其中设置默认值并能够使用如下环境变量覆盖它:

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

在这种情况下,在HOCON中,如果您没有定义一个名为FORCED_BASEDIR的环境变量,那么basedir将是“/any/any”,但如果您这样做了,那么basedir的值将是环境变量中定义的任何值。

谢啦

因此,根据下面的webdizz答案,我查找了一下,我发现在“Spring靴在行动”一书中有一个很好的描述。下面是层次结构:

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

    < li >命令行参数 < Li > Java:comp/env中的JNDI属性 < li>JVM系统属性 < li >操作系统环境变量 < li >前缀为random的属性的随机生成值。*(设置其他属性时引用,如“${ random . long }) < li >许可给Thomas Snead 58第3章自定义配置的应用程序之外的application.properties或application.yml文件 < li >打包在应用程序内部的application.properties或application.yml文件 由@PropertySource指定的属性源 < li >默认属性

共有1个答案

陶璞
2023-03-14

Spring Boot提供了在许多级别定义变量的方法,并且您的案例受支持,您只需要按以下方式定义变量:

在application.yml中:

basedir: "/whatever/whatever"

在环境中:

export BASEDIR = "/another/whatever"

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

如需更多详情,请查看此处输入链接描述。

 类似资料:
  • 我创建了一个管道,它从CodeCommit存储库获取代码,通过CodeBuild构建代码,并将代码推送到S3存储桶中。 对于我的代码构建,我使用的是AWS管理的映像。aws/codebuild/nodejs:7.0。0 如果我通过CodeBuild控制台手动启动构建并指定存储库,则在buildspec中运行以下命令时会获得存储库URL 但是如果代码构建是由推送到存储库自动触发的。CODEBUILD

  • 问题内容: 我读到Java为类属性提供了默认值,但没有为局部变量提供默认值。那是对的吗?如果是这样,背后的原因是什么?当您做某件事时,为什么不一直这样做呢? 谢谢你, 罗杰 问题答案: 标准局部变量存储在堆栈中,直到初始化后才真正创建。如果未使用局部变量,则它不会进入堆栈。但是,成员变量在堆中分配,因此具有默认的占位符(空引用或默认原语)。

  • 如何配置 比如要 # OS X, Linux $ PORT=3000 umi dev # Windows (cmd.exe) $ set PORT=3000&&umi dev # Or use cross-env for all platforms $ yarn add cross-env --dev $ cross-env PORT=3000 umi dev # .env $ echo P

  • TL公司;DR:如何将一组键/值对从文本文件导出到shell环境? 为了记录在案,以下是问题的原始版本,并附有示例。 我正在bash中编写一个脚本,它解析某个文件夹中具有3个变量的文件,这是其中之一: 此文件存储在 中 我的脚本然后使用以下代码解析文件: 但是当我在命令行中执行 时,它不会设置环境变量 我还尝试使用< code>source。/conf/$1但是同样的问题仍然存在 也许还有其他方法

  • 经过在internet上的搜索,我知道了在交互式/非交互式-登录/非登录shell组合的情况下应该在哪里更改PATH变量的值。 从另一个帖子中找到的 我有“/bin/sh”作为缺省登录shell,只有/etc/profile文件用于导出系统中所有需要的环境变量。在非交互式登录shell的情况下,/etc/profile也不会被引用,尽管上面的link说它会被引用。但当我执行时, 我可以看到PATH

  • 行动时刻 - 设置变量的默认值 我们并不总是确定变量是否存在。 Unlang为我们提供了语法,以便在变量不存在时指定默认值。 我们将再次通过修改上一个练习来证明这一点。 我们将使用radtest首先在请求中包含Framed-Protocol = PPP,并将其排除在外。 如果Framed-Protocol AVP不存在,我们将返回一个默认字符串。 编辑FreeRADIUS配置目录下的sites-a