使用 Gradle 管理 Spring 引导配置文件

Manage Spring Boot Profiles with Gradle

我有一个 Spring 引导应用程序,由 Gradle 管理。

目前做了什么:

  1. 创建了 application.yamlapplication-dev.yamlapplication-qa.yaml 个文件
  2. application.yaml 中提到 spring: profiles: active: dev(如果提到 none,则默认配置文件应为 dev

需要做的事情:

  1. 需要构建 war 并在构建时提及或通过配置文件。例如,对于 QA 构建,spring: profiles: active: 应该具有值 qa,以便它可以获取 application-qa.yaml 属性。
  2. 如果没有传递配置文件,则默认情况下应选择 dev 配置文件

目前尝试的内容:

  1. application.yaml 中的 spring: profiles: active: @activeProfiles@ 中添加了 @activeProfiles@ 并在 build.gradle 中添加了以下代码段:

    processResources {
        filter org.apache.tools.ant.filters.ReplaceTokens, tokens: [
            activeProfiles: activeProfiles
        ]
    }
    

    并触发了以下命令来构建 war - gradlew clean build -PactiveProfiles=qa,它对 war 文件做了正确的工作。但是现在这种方法的问题是,如何在 运行 从 IDE 中设置项目时为 activeProfiles 提供默认值(我通常更喜欢 运行 main class 来自 IntelliJ)?

我也不确定这是否是正确的方法,或者是否有任何其他方法可以完成此任务。我已经用 Maven 完成了所有这些事情,而且很轻松,但我是 Gradle 的新手,并且项目要求使用 Gradle.

在不同环境中的配置文件之间切换的一种常见方法是将 SPRING_PROFILES_ACTIVE 环境变量设置为您想要的值,然后让 Spring 启动使用它。例如,在 QA 环境中,您可以将值设置为 qa 并且 Spring 将自动使用 qa 应用程序属性。 阅读更多:https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto-set-active-spring-profiles

如果在 running/building 代码中没有传递配置文件,我可以设置默认配置文件,使用 build.gradle 文件中的以下配置。在任何 IDE 到 运行 项目中都不需要额外的配置。

def activeProfiles=project.properties['activeProfiles'] ?: "dev" // set default (dev) profile if no profile is passed as property

processResources {
    filter org.apache.tools.ant.filters.ReplaceTokens, tokens: [
        activeProfiles: activeProfiles
    ]
}

我有 3 个 yaml 文件用于根据环境进行配置:

  1. application.yaml
  2. application-dev.yaml
  3. application-qa.yaml

application.yaml 包含 spring 配置文件管理的以下配置,以及其他常见配置:

spring:
    profiles:
        active: @activeProfiles@
...

application-dev.yamlapplication-qa.yaml 文件包含与各自环境相关的配置。