4

我的 Spring Boot 应用程序具有以下属性文件。

src/main/resources/config/DEV/env.properties
mail.server=dev.mail.domain

src/main/resources/config/QA/env.properties
mail.server=qa.mail.domain

src/main/resources/config/common/env.properties
mail.url=${mail.server}/endpoint

是否可以加载“common/env.properties”,以便使用给定的环境特定属性文件解析占位符。对于 DEV 环境,我们希望使用“DEV/env.properties”中的值来解析“common/env.properties”中的占位符。

有关于如何加载多个属性文件和基于配置文件的加载的答案,但找不到此特定用例的答案。

提前致谢。

4

3 回答 3

3

2个选项:

  1. 为每个环境生成common/application.properties使用和过滤文件。configuration-maven-plugin现在已经过时了。
  2. 用于application-<env>.properties每个环境并-Dspring.profiles.active=<env>在应用程序启动时传递 as VM 选项。Spring 会自动从正确的文件中获取属性。

在选项 2 中,您将使用 application-.properties 覆盖 application.properties 中存在的任何内容。因此,您不必只添加每个环境需要更改的属性。

例如:

application.properties可以拥有

logging.level.root=WARN
logging.level.org.apache=WARN
logging.level.org.springframework=WARN

application-dev.properties可以拥有

logging.level.org.springframework=DEBUG

这意味着,当您使用dev配置文件启动应用程序时,spring 需要

logging.level.root=WARN
logging.level.org.apache=WARN
logging.level.org.springframework=DEBUG

编辑 :

此外,您可以在课堂上尝试以下内容。(Spring 将使用 config-dev.properties 中的值覆盖 config.properties 中的值)。ignoreResourceNotFound将确保即使找不到相应的文件,应用程序仍会以默认值启动。

@Configuration
@PropertySource("classpath:config.properties")
@PropertySource(value = "classpath:config-${spring.profiles.active}.properties", ignoreResourceNotFound = true)
于 2019-02-26T11:07:37.633 回答
0

您可以通过在类配置中声明属性源并在路径中设置环境变量来实现此目的:

@PropertySource({ "classpath:config/${env}/env.properties" })
@Configuration
public class config{}

然后使用命令行变量启动 spring boot 应用程序-env=dev

更新

您可以使用 @PropertySources 注释来加载多个属性。

 @PropertySources({
    @PropertySource("classpath:config/${env}/env.properties"),
    @PropertySource("classpath:config/common/env.properties")
  })
  public class config{}
于 2019-02-26T10:45:01.253 回答
0

您可以添加 resources/application.yml 文件,您可以在一个文件中拥有多个配置文件。 MultiProfile Yaml eghere 是两个不同的配置文件“dev”和“qa”,具有不同的应用程序名称“DEV”和“QA”以及一个 defaultName“默认”

spring:
  application:
    name: Default
  profiles:
    active: qa

---
spring:
  profiles: dev
  application:
    name: DEV
---
spring:
  profiles: qa
  application:
    name: QA
于 2019-02-26T14:36:33.503 回答