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

时间:2017-03-31 19:58:50

标签: java spring-boot yaml manifest string-interpolation

我正在使用Java和spring boot。我想知道如何将Property占位符添加到event/data/email_template_data.xml文件中。我发现了一些清晰的例子但是我不确定Property占位符在哪里被实例化。它是在系统env变量,文件等中吗??

Bootstrap.yml

.yml

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

这个Web应用程序将使用“cf push”推送到云代工厂,它将自动选择要配置的manifest.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

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

4 个答案:

答案 0 :(得分:12)

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

这是解决我的问题link

的链接

答案 1 :(得分: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 Environment:

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

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

您还可以使用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中指定的文件按原样使用,不支持特定于配置文件的变体,并且会被任何特定于配置文件的属性覆盖。

以相反的顺序搜索配置位置。默认情况下,配置的位置是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选择的其他任何基本名称)中为应用程序提供默认值。然后,可以在运行时使用自定义位置之一中的其他文件覆盖这些默认值。

答案 2 :(得分:0)

经过一些研究和实验,我发现占位符既可以是环境变量又可以是command line arguments。属性文件的语法也可以在YAML文件中使用。 @Jesse已解释了环境变量。如果您说通过命令行参数:

--my.stored.files.username=UsernameSample--username=UsernameSample,配置属性将按预期填充

my:
 stored:
  files:
   username: ${username:defaultUsername}

我希望这可能对遇到类似问题的人有所帮助。

答案 3 :(得分:-1)

对于.yml文件,请使用{{your key}}作为占位符