如何在 .yml 文件中使用属性占位符

我正在使用Java和spring boot。我想知道如何将属性占位符添加到文件中。我找到了一些清晰的例子,但我不确定属性占位符在哪里被实例化。它是否在系统环境变量,文件等中?.yml

Bootstrap.yml

spring:
  cloud:
    config:
      username: ${my.stored.files.username}
      password: ${my.stored.files.password}
      label: ${spring.cloud.find.label}
      uri: ${spring.cloud.config.uri}
      enabled: false
      failFast: true

用户正在使用属性占位符,但用户在哪里声明了它们?这个.yml从哪里读取值?(同上问题)是否有解释连接的文档?

此Web应用程序将使用“cf push”推送推送到云铸造厂,这将自动选择infest.yml文件进行配置。如果可能的话,一个云代工的例子会很棒。

了解/示例应用程序.属性文件

app.name=MyApp
app.description=${app.name} 

用户能够使用 ${app.name},因为它是定义的。我对上面的例子感到困惑。用户如何以及在何处获得“${my.stored.files.username}”。这是在哪里定义的?我以为它会在system.properties或环境变量中。任何人都可以确认吗?


答案 1

经过深入研究,我发现当我在.yml文件中使用占位符时,它会从环境变量中读取该值。这是一开始我理论的一部分,但没有人证实。

当地环境的答案

spring:
  cloud:
    config:
      username: ${my.stored.files.username}
      password: ${my.stored.files.password}
      label: ${spring.cloud.find.label}
      uri: ${spring.cloud.config.uri}
      enabled: false
      failFast: true

*在环境变量中 *

Image as example

set key as: my.stored.files.username
set value as: UsernameSample

然后

当您运行应用程序时,yml将像这样阅读。

    config:
      username: ${my.stored.files.username}
                //gets replaced with UsernameSample

这是解决我的问题链接的链接

对于云铸造

您必须创建杯子或手动将这些变量添加到服务中。


答案 2

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-application-property-files

SpringApplication 从 application.properties 文件中加载以下位置的属性,并将它们添加到 Spring 环境中:

  • 当前目录的 /config 子目录
  • 当前目录
  • 类路径 /配置包
  • 类路径根

列表按优先级排序(在列表中较高位置定义的属性将覆盖在较低位置定义的属性)。

您还可以使用 YAML ('.yml') 文件作为 '.properties' 的替代项。

如果不喜欢 application.properties 作为配置文件名,则可以通过指定 spring.config.name 环境属性切换到另一个文件名。您还可以使用 spring.config.location 环境属性(该属性是以逗号分隔的目录位置或文件路径列表)来引用显式位置。下面的示例演示如何指定其他文件名:

 $ java -jar myproject.jar --spring.config.name=myproject

下面的示例演示如何指定两个位置:

$ java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties

spring.config.name 和spring.config.location很早就被用来确定必须加载哪些文件。它们必须定义为环境属性(通常是 OS 环境变量、系统属性或命令行参数)。

如果 spring.config.location 包含目录(而不是文件),它们应该以 / 结尾(并且在运行时,在加载之前附加从 spring.config.name 生成的名称,包括特定于配置文件的文件名)。在 spring.config.location 中指定的文件将按原样使用,不支持特定于配置文件的变体,并且会被任何特定于配置文件的属性覆盖。

配置位置按相反的顺序进行搜索。默认情况下,配置的位置是类路径:/,类路径:/config/,file:./,file:./config/。生成的搜索顺序如下:

  • file:./config/
  • file:./
  • classpath:/config/
  • classpath:/

使用 spring.config.location 配置自定义配置位置时,它们将替换默认位置。例如,如果 spring.config.location 配置了值 classpath:/custom-config/,file:./custom-config/,则搜索顺序将变为:

  • file:./custom-config/
  • classpath:custom-config/

或者,当使用 spring.config.additional-location 配置自定义配置位置时,除了默认位置之外,还会使用它们。在默认位置之前搜索其他位置。例如,如果配置了类路径的其他位置:/custom-config/,file:./custom-config/,则搜索顺序将变为:

  • file:./custom-config/
  • classpath:custom-config/
  • file:./config/
  • file:./
  • classpath:/config/
  • classpath:/

此搜索顺序允许您在一个配置文件中指定默认值,然后在另一个配置文件中有选择地覆盖这些值。可以在某个默认位置的 application.properties(或使用 spring.config.name 选择的任何其他基名)中为应用程序提供默认值。然后,可以在运行时使用位于其中一个自定义位置中的其他文件覆盖这些默认值。