[英]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
)文件加载属性并将它们添加到 SpringEnvironment
:
- 当前目录的
/config
子目录。- 当前目录
- 一个类路径
/config
包- 类路径根
如果您不喜欢
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
,其中的属性仍将被加载,但优先于命令行上指定的属性文件。
您的问题并没有真正说明您打算做什么,但是如果您想针对不同的环境(例如development
、 test
、 production
)使用不同的配置,则有一个简单的解决方案。
将您的配置文件放在项目中这样的文件层次结构中:
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
文件中设置特定于环境的配置。 这同样适用于test
和production
。
没有。
如果您避免在代码库中使用硬编码文件路径,您将处于一个更好的位置。 @ConfigurationProperties
曾经有一个locations
属性,但它已被弃用并已在1.5 中删除。
在 Spring Boot 中,您配置Environment
,它是您的配置的单一真实来源。 您应该配置 Spring Boot 以读取所需的文件,而不是将设置隐藏在代码中。 阅读spring.config.location
的文档。 如果您想以更透明的方式执行此操作,也许EnvironmentPostProcessor
就是您所需要的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.