繁体   English   中英

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

[英]Using two yaml files for configuration properties

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

config: 
  host: localhost:8080  
  server: 123  

他们被拉入这样的.java文件中

@ConfigurationProperties( prefix="config")  
public class ConnectionImpl implements Connection{
  @Value("${config.host}")
  private Stringhost;
} 

我能够以这种方式检索属性。 但是我们试图将配置属性从application.yml移动到位于不同位置的不同.yml文件。 src/main/resources/env-config )。
现在我无法以相同的方式检索属性,即使用@Value注释。 我需要添加任何其他注释吗?

文档

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

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

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

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

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

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

如果您在resources/下有一个通用的application.yml ,其中的属性仍将被加载,但优先于命令行上指定的属性文件。

您的问题并没有真正说明您打算做什么,但是如果您想针对不同的环境(例如developmenttestproduction )使用不同的配置,则有一个简单的解决方案。

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

src/
  main/
    resources/
      application.yml
      application-development.yml
      application-test.yml
      application-production.yml

当你现在开始你的应用程序时

java -jar mySpringApplication.jar -Dspring.profiles.active=development

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

没有。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM