特定环境的spring yml文件

Posted

技术标签:

【中文标题】特定环境的spring yml文件【英文标题】:spring yml file for specific environment 【发布时间】:2016-08-30 05:02:46 【问题描述】:

我有 3 个yml 文件,即

application-default.yml -> 默认属性,应该可用 在所有个人资料中 application-dev.yml -> 仅适用于开发人员的属性 简介 application-prod.yml -> 仅适用于产品配置文件的属性

当我通过传递-Dspring.profiles.active=dev 启动我的引导应用程序时,我能够访问application-dev.yml 特定属性。 但我无法获得application-default.yml 文件中定义的属性。 以下是我的application-dev.yml 文件:

Spring:
 profiles:
  include: default

spring.profiles: dev

prop:
 key:value

【问题讨论】:

尝试将 application-default.yml 重命名为 application.yml(这是默认值)。 我试过了,但还是不行。 【参考方案1】:

TL;DR

只需将 application-default.yml 文件重命名为 application.yml 即可按预期工作。

说明

根据the description in the docs,当您使用名称与后缀匹配的配置文件运行应用程序时,会激活一个名为 application-suffix.yml 的文件。此外,默认情况下会加载主 application.yml,因此它是放置所有配置文件通用属性的理想位置。或者,如果您想将文件名保留为 application-default.yml,您可以将两个配置文件传递给您的 Spring Boot 应用程序:

-Dspring.profiles.active=default,dev

这样您将激活两个配置文件并加载两个属性文件。

【讨论】:

感谢 Daniel 的回复,我想这也应该有效,因为我们正在明确激活这两个配置文件。我也会试试这个。 @Daniel Olszewski 是否有任何选项可以命名 yml 或属性文件,而不是 application 。说喜欢datasource.yml @Arunprasad 是的,但是你必须使用 @PropertySource 注释手动加载它 @Arunprasad 要将application.yml 更改为myapp.yml(同时保留myapp-profile.yml),您需要java -Dspring.config.name=myapp ... 但请记住:jar 文件可能包含application.yml;现在将被忽略;这是一个重大变化;您无法知道新的 jar 版本会出现哪些新设置。【参考方案2】:

我能够解决我的问题,这就是我所做的。

创建了一个文件 application-common.yml,把通用属性放在那里。 然后在 application-env.yml 文件中,我把它放在顶部。

spring:
 profiles:
  include: default

因为我不需要专门加载默认配置文件,所以这对我有用!!!

【讨论】:

只是好奇,与以前的设置相比有何变化。这看起来类似于您之前在 application-dev.yml 中的内容。 您的意思可能是 application-default.yml?还是你使用了 include: common?【参考方案3】:

我做的是:

将常用设置放入application.xml,并在此文件中添加:

spring:
  profiles:
    active: dev, pro, xxx...

您要激活的所有配置文件。

这样您只需编辑此文件即可切换环境。

请记住处理外部文件,因此您可以将另一个 application.xml 留在 WAR 之外以激活 dev/pro/... 环境,而不是每次都编辑此文件。请务必查看文档:

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

【讨论】:

这个例子很奇怪。您要同时激活开发环境和生产环境?要么我遗漏了一些东西,要么答案对于刚刚了解这一点的人来说是不必要的混乱。 这就是例子。应该是dev, dev-db, test-data... 左右。只是想法。

以上是关于特定环境的spring yml文件的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot App 无法识别 application.yml 文件中的环境变量

Spring Cloud 配置中心多环境配置bootstrap.yml

单体Spring boot引入外部配置文件yml,properties

SpringBoot多个yml实现开发测试线上多环境

将环境变量传递给 application.yml

Spring —— Spring Boot 配置文件