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

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

陆俊智
2023-03-14

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

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推送”推送到云代工厂,它将自动选择manifest.yml文件进行配置。如果可能的话,云代工厂的例子会很棒。

了解/示例Application.properties文件

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

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

共有3个答案

米项禹
2023-03-14

经过一些研究和实验,我发现占位符既可以是环境变量,也可以是命令行参数。属性文件的语法在YAML文件中也有效。@Jesse已经解释了环境变量。如果让pass命令行参数:

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

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

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

皇甫逸清
2023-03-14

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-功能外部配置应用程序属性文件

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

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

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

你也可以用YAML(’。yml′)文件作为。属性。

如果不喜欢 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:。/,文件:。/config/。产生的搜索顺序如下:

  • 文件:./config/
  • 文件:./
  • 类路径:/config/
  • 类路径:/

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

    < li> 文件:。/custom-config/ < Li > < code > class path:custom-config/

或者,当使用spring . config . additional-location配置自定义配置位置时,除了默认位置之外,还会使用它们。在默认位置之前搜索附加位置。例如,如果类路径的附加位置:/custom-config/,文件:。/custom-config/时,搜索顺序如下:

  • file:./自定义-配置/
  • 类路径:自定义-config/
  • 文件:./config/
  • 文件:./
  • 类路径:/config/
  • 类路径:/

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

汤枫
2023-03-14

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

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

对于Cloudfinry

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

 类似资料:
  • 问题内容: 我们曾经有一种从类路径上的文件加载属性的方法: 而且效果很好。但是现在我们要从不在类路径中的系统上的特定文件加载属性。我们希望能够动态加载文件,因此我们使用Java环境变量来填充它。我将在下面给出一个简单的示例: 在Java中: 在Spring XML中: 感谢Luciano的一个想法,我也尝试过这种方法: 我尝试过的一切都失败了。无论我将my.prop.file设置为什么。最热门的歌

  • 当使用Spring Cloud AWS进行回购时,我注意到application.yml包含 但我找不到这些属性在哪里使用。通常,yml属性是通过@Value或@ConfigurationProperties导入的,但是在repo中没有用于它们的注释。 pom。xml文件具有和依赖项,我猜它们使用了属性。 每当我添加自定义属性,如,pom.xml抱怨未知属性。 我实际上不知道yaml文件中的属性如

  • 我的第一个疑惑是yml和yaml有什么区别?我应该用哪一个。此外,我必须把我的标签在yml文件,并加载它们。所以我不知道该怎么做。这方面的任何例子或教程都会非常有帮助。

  • 在Spring Boot中,我知道我可以替换应用程序。属性与应用程序。yml并使用YAML格式。然而,我的申请。yml越来越拥挤了,所以我需要把它分开一点。我该怎么做?我想这样做:

  • 问题内容: 我试图通过用联接上的参数替换来避免任何SQL注入漏洞。 这会尝试执行带有问号的查询,而不是将其替换为参数。这样做的正确方法是什么? 编辑: 查询需要返回以下内容: 不是 结果截然不同! 问题答案: 一种选择是使用sanitize_sql_array方法。但是,它是一种受保护的方法,因此在您的类别模型上,您可以执行以下操作: 然后,您将这样称呼它: Ruby提供了一些其他方法(如果需要)