我正在尝试设置gradle以启用bootRun
进程并启用各种弹簧配置文件。
我当前的bootRun
配置如下:
bootRun {
// pass command line options from gradle to bootRun
// usage: gradlew bootRun "-Dspring.profiles.active=local,protractor"
if (System.properties.containsKey('spring.profiles.active')) {
systemProperty "spring.profiles.active", System.properties['spring.profiles.active']
}
}
我想使用gradle
任务设置系统属性,然后执行bootRun
。
我的尝试看起来像这样:
task bootRunDev
bootRunDev {
System.setProperty("spring.profiles.active", "Dev")
}
几个问题:
systemProperty
spring boot bootRun配置的一部分吗?bootRunDev
bootRun
配置
-Eric
答案 0 :(得分:25)
最简单的方法是定义默认值并允许它被覆盖。我不确定在这种情况下systemProperty的用途是什么。简单的论证就可以完成这项工作。
def profiles = 'prod'
bootRun {
args = ["--spring.profiles.active=" + profiles]
}
运行dev:
./gradlew bootRun -Pdev
要为您的任务添加依赖项,您可以执行以下操作:
task setDevProperties(dependsOn: bootRun) << {
doFirst {
System.setProperty('spring.profiles.active', profiles)
}
}
在Gradle中有很多方法可以实现这一目标。
编辑:
为每个环境配置单独的配置文件。
if (project.hasProperty('prod')) {
apply from: 'gradle/profile_prod.gradle'
} else {
apply from: 'gradle/profile_dev.gradle'
}
每个配置都可以覆盖任务,例如:
def profiles = 'prod'
bootRun {
systemProperty "spring.profiles.active", activeProfile
}
在这种情况下通过提供prod
标志来运行:
./gradlew <task> -Pprod
答案 1 :(得分:25)
环境变量可用于设置弹簧属性,如the documentation中所述。因此,要设置活动配置文件(spring.profiles.active
),您可以在Unix系统上使用以下代码:
SPRING_PROFILES_ACTIVE=test gradle clean bootRun
在Windows上,您可以使用:
SET SPRING_PROFILES_ACTIVE=test
gradle clean bootRun
答案 2 :(得分:11)
Spring Boot v2 Gradle plugin docs提供了一个答案:
6.1。将参数传递到您的应用程序
与所有JavaExec任务一样,在使用 4.9版或更高版本时,可以使用
--args='<arguments>'
从命令行将参数传递到bootRun中。
要运行将活动配置文件设置为 dev 的服务器:
$ ./gradlew bootRun --args='--spring.profiles.active=dev'
答案 3 :(得分:7)
对于使用Spring Boot 2.0+的人,您可以使用以下内容设置一个任务,该任务将使用给定的一组配置文件运行应用程序。
task bootRunDev(type: org.springframework.boot.gradle.tasks.run.BootRun, dependsOn: 'build') {
group = 'Application'
doFirst() {
main = bootJar.mainClassName
classpath = sourceSets.main.runtimeClasspath
systemProperty 'spring.profiles.active', 'dev'
}
}
然后,您只需从IDE运行./gradlew bootRunDev
或类似内容即可。
答案 4 :(得分:3)
使用此shell命令将起作用:
SPRING_PROFILES_ACTIVE=test gradle clean bootRun
可悲的是,这是我发现的最简单的方法。 它为该调用设置环境属性,然后运行该应用程序。
答案 5 :(得分:3)
Kotlin 版本:在您的build.gradle.kts
文件中定义以下任务:
tasks.named<BootRun>("bootRun") {
args("--spring.profiles.active=dev")
}
这会将参数--spring.profiles.active=dev
传递到bootRun
,在这种情况下,配置文件名称为dev
。
每次运行gradle bootRun
时,都会使用配置文件dev
。
答案 6 :(得分:2)
针对具有不同配置文件和gradle任务依赖性的4个不同任务的配置:
A = internal clients union external clients
B = internal addresses union external addresses
C = A join B join phone numbers
和bootRunLocal
-使用特定的配置文件运行bootRunDev
和bootPostgresRunLocal
与上一版本相同,但是在bootRun之前/之后执行自定义任务bootPostgresRunDev
和runPostgresDocker
killPostgresDocker
:
build.gradle
答案 7 :(得分:2)
在您的build.gradle
文件中,只需使用以下代码段
bootRun {
args = ["--spring.profiles.active=${project.properties['profile'] ?: 'prod'}"]
}
然后运行以下命令以使用dev
配置文件:
./gradlew bootRun -Pprofile=dev
答案 8 :(得分:1)
添加到VM选项: -Dspring.profiles.active = dev
答案 9 :(得分:0)
我希望它很简单,就是能够像您一样调用gradle bootRunDev,而不必进行任何额外的输入。
这对我有用-通过在任务中首先配置bootRun,然后在它运行bootRun之后立即运行,对我来说很好:)
onchange
答案 10 :(得分:0)
对于希望在Kotlin DSL中实现此功能的任何人,这是build.gradle.kts
的有效示例:
tasks.register("bootRunDev") {
group = "application"
description = "Runs this project as a Spring Boot application with the dev profile"
doFirst {
tasks.bootRun.configure {
systemProperty("spring.profiles.active", "dev")
}
}
finalizedBy("bootRun")
}
答案 11 :(得分:0)
我的方式:
在gradle.properties中:
profile=profile-dev
在build.gradle中添加VM选项-Dspring.profiles.active:
bootRun {
jvmArgs = ["-Dspring.output.ansi.enabled=ALWAYS","-Dspring.profiles.active="+profile]
}
这将覆盖应用程序 spring.profiles.active 选项