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

新手上路,请多包涵

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

引导程序.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”推送到 cloud foundry,它将自动选择 manifest.yml 文件进行配置。如果可能的话,一个云铸造厂的例子会很棒。

了解/示例 Application.properties 文件

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

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

原文由 JayC 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

经过深入研究,我发现当我在 .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

*在环境变量中*

图片为例

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

然后

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

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

这是解决我的问题的 链接

对于 Cloudfoundry

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

原文由 JayC 发布,翻译遵循 CC BY-SA 4.0 许可协议

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 子目录
  • 当前目录
  • 类路径 /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 很早就用于确定必须加载哪些文件。它们必须定义为环境属性(通常是操作系统环境变量、系统属性或命令行参数)。

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

配置位置以相反的顺序搜索。默认情况下,配置的位置是classpath:/,classpath:/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 配置自定义配置位置时,除了默认位置外还会使用它们。在默认位置之前搜索其他位置。例如,如果配置了 classpath:/custom-config/,file:./custom-config/ 的附加位置,则搜索顺序变为以下:

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

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

原文由 gavenkoa 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题