【问题标题】:How to specify an external application.yml in spring with profiles如何在 spring 中使用配置文件指定外部 application.yml
【发布时间】:2015-11-29 20:50:33
【问题描述】:

从 spring 文档 http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-yaml 我看到外部 YAML 文件是可能的。

我能够使用 PropertyPlaceholderConfig FileSystem 资源在 yaml 中加载,但它不支持活动配置文件。

我看到 application.properties 可以使用 @PropertySource,但根据文档,这不适用于 YAML。

所以底线问题:如何在 Spring4/spring boot 中以配置文件感知方式指定 application.yml。

注意:它适用于 src/main/resources/application.yml

【问题讨论】:

  • 只需在application.yml 旁边放置一个application-[profile].yml。如您所指的同一链接中所述。 Spring Boot 会自动加载它。
  • 这适用于使用标准属性文件的类路径资源。我的目标是外部资源 yaml(一个文件中的所有配置文件)
  • 请阅读文档而不是创建您自己的解释。它也适用于 YAML 文件。除此之外,它还适用于与 jar 或配置目录位于同一目录中的文件。所以再次阅读该配置部分...如果您想指定一个文件,只需使用 --spring.config.location 启动您的应用程序,该部分将进一步解释 (docs.spring.io/spring-boot/docs/current/reference/html/…)。
  • 我已多次阅读文档,但仍然感谢您的回复。缺少的部分是在我的 spring.config.location 变量中指定 file: 前缀,它现在可以工作了。
  • @redwhite 如果您可以将我指向任何解决此问题的公共 github 存储库,那将非常有帮助。

标签: spring spring-boot


【解决方案1】:

为了指定外部配置文件感知 .yml 文件,可以使用 SPRING_CONFIG_LOCATION 和 SPRING_PROFILES_ACTIVE 系统变量。

JAVA_OPTS 示例

-Dspring.profiles.active=dev -Dspring.config.location=file:C:/application.yml

这将允许您在 YML 文件中提供多个配置文件,并让 spring 完成评估正确属性的繁重工作:

spring:
  profiles: dev
someprop: devprop
---
spring:
  profiles: test
someprop: testprop

【讨论】:

  • 如果添加 someprop: ${devprop} 这个 yml 文件会去哪里检索占位符的值?
  • @Jesse 它会去你的环境变量中检索。
猜你喜欢
  • 1970-01-01
  • 2016-08-19
  • 1970-01-01
  • 2016-06-07
  • 2015-11-11
  • 1970-01-01
  • 2018-12-30
  • 2022-10-04
  • 1970-01-01
相关资源
最近更新 更多