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

zbdgwd5y  于 2022-12-23  发布在  Spring
关注(0)|答案(5)|浏览(328)

我正在使用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从哪里阅读值?(与上面的问题相同)是否有文档解释了这种连接?
这个网络应用程序将被推到云铸造使用“cf推”,这将自动选择manifest.yml文件进行配置。如果可能的话,一个云铸造的例子将是伟大的。

了解/示例Application.properties文件

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

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

wgx48brx

wgx48brx1#

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

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

    • 云铸造公司**

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

1cosmwyk

1cosmwyk2#

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-application-property-files
SpringApplication loads properties from application.properties files in the following locations and adds them to the Spring Environment:

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

该列表按优先级排序(在列表中较高位置定义的特性将覆盖在较低位置定义的特性)。
您还可以使用YAML('. yml')文件作为'. properties'的替代文件。
If you do not like application.properties as the configuration file name, you can switch to another file name by specifying a spring.config.name environment property. You can also refer to an explicit location by using the spring.config.location environment property (which is a comma-separated list of directory locations or file paths). The following example shows how to specify a different file name:

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

以下示例说明如何指定两个位置:

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

spring.config.name and spring.config.location are used very early to determine which files have to be loaded. They must be defined as an environment property (typically an OS environment variable, a system property, or a command-line argument).
If spring.config.location contains directories (as opposed to files), they should end in / (and, at runtime, be appended with the names generated from spring.config.name before being loaded, including profile-specific file names). Files specified in spring.config.location are used as-is, with no support for profile-specific variants, and are overridden by any profile-specific properties.
配置位置按相反的顺序搜索。默认情况下,配置的位置为classpath:/、classpath:/config/、file:./、file:./config/。生成的搜索顺序如下:

  • 第一个月
  • file:./
  • classpath:/config/
  • classpath:/

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

  • 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:./
  • x1米10英寸1x
  • x1米11米1x

This search ordering lets you specify default values in one configuration file and then selectively override those values in another. You can provide default values for your application in application.properties (or whatever other basename you choose with spring.config.name) in one of the default locations. These default values can then be overridden at runtime with a different file located in one of the custom locations.

jmo0nnb3

jmo0nnb33#

在做了一些研究和实验后,我发现占位符可以是环境变量和命令行参数。属性文件的语法在YAML文件中也起作用。环境变量已经由@Jesse解释过了。如果你让它传递命令行参数:
--my.stored.files.username=UsernameSample--username=UsernameSample,则配置属性将按预期填充

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

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

rta7y2nd

rta7y2nd4#

ddsultan的答案对我很有效。以防像我这样的人需要在idea中设置占位符值。编辑运行配置,单击修改选项,然后选中“程序选项”,在新添加的字段中,输入占位符值,例如“--section=4”。

2w2cym1i

2w2cym1i5#

如果是.yml文件,请使用{{your key}}作为保持器

相关问题