如何在 Gradle 4.7 中设置 Spring Boot 活动配置文件

sae*_*edj 9 java profile gradle spring-boot

总体而言:
我正在尝试为特定的 spring 配置文件运行 gradle 构建任务,但在通过以下测试时出错:

au.com.mnpd.security.JwtTokenUtilTest > generateToken_succeeds FAILED
java.lang.IllegalStateException
    Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException
        Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException
            Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException
                Caused by: org.springframework.beans.factory.BeanCreationException
                    Caused by: java.lang.IllegalArgumentException
Run Code Online (Sandbox Code Playgroud)

该测试使用了 spring开发配置文件中的一些属性(位于 application-development.yaml 中)。但是我找不到任何方法将活动配置文件传递给 gradle build 命令。我尝试了以下但同样的问题:

- gradlew -Dspring.profiles.active=development build

- gradlew -Pdevelopment build
Run Code Online (Sandbox Code Playgroud)

问题:
是否有将活动配置文件传递给 gradle (v 4.7)构建任务,例如适用于bootRun任务的内容,如下所示:

bootRun {
        bootRun.systemProperty 'spring.profiles.active', 'development'
}
Run Code Online (Sandbox Code Playgroud)

注意:我为构建尝试了相同的方法,但构建任务不存在build.systemProperty方法。

由于我是 gradle 新手,如果您能与我分享您的真正解决方案,我将不胜感激。

Lou*_*met 11

您正在寻找的是在Test任务上设置系统属性,这将运行您的单元测试:

test {
  systemProperty 'spring.profiles.active', 'development'
}
Run Code Online (Sandbox Code Playgroud)

评论后编辑 - 将原始答案留在下面,因为它可能仍然有用。

Gradle 不知道bootRun公开其系统属性的方式。

因此,您必须在构建脚本中添加配置,以向 Gradle 命令行公开您需要的内容。

就像是:

bootRun {
    bootRun.systemProperty 'spring.profiles.active', "${springProfile}"
}
Run Code Online (Sandbox Code Playgroud)

然后有一个默认值gradle.properties

springProfile = development
Run Code Online (Sandbox Code Playgroud)

并可能覆盖命令行上的值:

./gradlew -PspringProfile=test build
Run Code Online (Sandbox Code Playgroud)


Rah*_*and 5

如果你使用 gradle boot run 你需要把它添加到你的 build.gradle 文件中

bootRun {
    String activeProfile =  System.properties['spring.profiles.active']
    systemProperty "spring.profiles.active", activeProfile
}
Run Code Online (Sandbox Code Playgroud)

然后在构建时您可以使用 gradle bootRun -Dspring.profiles.active=test

或者构建你可以使用 gradle build -Dspring.profiles.active=test


Eug*_*ene 5

Gradle 文件不应依赖于您的 spring 配置文件,除非您明确希望这样做。

要使用特定配置文件运行您的应用程序,请使用:

SPRING_PROFILES_ACTIVE=myprofile ./gradlew bootRun
Run Code Online (Sandbox Code Playgroud)