使用两个yaml文件进行配置属性

use*_*988 11 java configuration yaml properties spring-boot

我们正在使用一个spring boot应用程序,其中属性从application.yml文件而不是application.properties加载,位于src/main/resources /,如下所示:
config:
host:localhost:8080
server:123

而且它们被拉入这样的.java文件中

config: 
  host: localhost:8080  
  server: 123  
Run Code Online (Sandbox Code Playgroud)

我能够以这种方式检索属性.但我们正在尝试将配置属性从application.yml移动到位于不同位置的另一个.yml文件.(SRC /主/资源/ ENV-CONFIG).
现在我无法以相同的方式检索属性,即使用@Value注释.我还需要添加其他注释吗?

su4*_*u45 8

文档:

SpringApplication将从以下位置的application.properties(或application.yml)文件加载属性并将它们添加到Spring Environment:

  1. 一个/config当前目录下的子目录.
  2. 当前目录
  3. 一个classpath /config
  4. 类路径根

如果您不喜欢application.properties配置文件名,可以通过指定spring.config.name环境属性切换到另一个.您还可以使用spring.config.locationenvironment属性(以逗号分隔的目录位置列表或文件路径)来引用显式位置.

classpath:,classpath:/config,file:,file:config/始终使用默认搜索路径,而不考虑其值spring.config.location.此搜索路径按从最低优先级到最高优先级(file:config/胜利)排序.如果您确实指定了自己的位置,则它们优先于所有默认位置,并使用相同的最低到最高优先级排序.通过这种方式,您可以为应用程序设置默认值application.properties(或者您选择的任何其他基本名称spring.config.name),并在运行时使用不同的文件覆盖它,保留默认值.

您需要提供一个命令行参数,告诉您SpringApplication具体查看的位置.如果将所有resources/内容添加到类路径根目录中,那么您的命令行将如下所示:

java -jar myproject.jar --spring.config.location=classpath:/env-config/service-config.yml

如果你有一个一般的application.ymlresources/,在出现的属性仍将被加载,但会采取较低的优先级在命令行上指定的属性文件.


Mic*_*ihs 5

你的问题并没有真正说你打算做什么,但如果你想为不同的环境不同的配置(例如development,test,production),对于一个简单的解决方案.

将配置文件放在项目中的文件层次结构中:

src/
  main/
    resources/
      application.yml
      application-development.yml
      application-test.yml
      application-production.yml
Run Code Online (Sandbox Code Playgroud)

当您现在开始使用应用程序时

java -jar mySpringApplication.jar -Dspring.profiles.active=development
Run Code Online (Sandbox Code Playgroud)

配置application.yml将被视为"基础层",由配置覆盖application-development.yml.这样,您可以为文件中的所有环境application.yml和特定于环境的配置设置"默认"设置application-ENV.yml.同样适用于testproduction.


Ste*_*oll 4

不。

如果您避免像代码库中那样对文件路径进行硬编码,您将处于更好的位置。@ConfigurationProperties曾经有一个locations属性,但它已被弃用并已在 1.5 中删除。

在 Spring Boot 中,您可以配置它Environment,这是您的配置的单一事实来源。您应该配置 Spring Boot 来读取所需的文件,而不是将设置隐藏在代码中。阅读 的文档spring.config.location。如果您想以更透明的方式做到这一点,也许EnvironmentPostProcessor就是您所需要的