如何在分叉进程上使用 gradle 任务启动 Spring Boot 应用程序?
Posted
技术标签:
【中文标题】如何在分叉进程上使用 gradle 任务启动 Spring Boot 应用程序?【英文标题】:How to start spring boot application with a gradle task on a forked process? 【发布时间】:2020-03-09 14:46:37 【问题描述】:我有一个带有虚拟端点的 Spring Boot 应用程序,我想在该端点上执行加特林负载测试。
毕业任务:
task testLoad(type: JavaExec)
description = 'Test load the Spring Boot web service with Gatling'
group = 'Load Test'
classpath = sourceSets.test.runtimeClasspath
jvmArgs = [
"-Dgatling.core.directory.binaries=$sourceSets.test.output.classesDir.toString()",
"-Dlogback.configurationFile=$logbackGatlingConfig()"
]
main = 'io.gatling.app.Gatling'
args = [
'--simulation', 'webservice.gatling.simulation.WebServiceCallSimulation',
'--results-folder', "$buildDir/gatling-results",
'--binaries-folder', sourceSets.test.output.classesDir.toString()
]
虚拟休息端点:
@RestController
public class GreetingController
@RequestMapping("/greeting")
public Greeting greeting()
return new Greeting("Hello, World");
我想在 gradle 中创建另一个任务来启动 Spring Boot 应用程序。
testLoad.dependsOn startSpringBoot
所以,问题是我不知道如何在 gradle 任务中启动 spring boot 应用程序:
task startSpringBoot(type: JavaExec)
// somehow start main = 'webservice.Application'
然后用另一个任务关闭spring boot应用:
testLoad.finalizedBy stopSpringBoot
task stopSpringBoot(type: JavaExec)
// somehow stop main = 'webservice.Application'
【问题讨论】:
【参考方案1】:我发现一个教程确实向您展示了如何做到这一点: http://brokenrhythm.blog/gradle-gatling-springboot-automation#Gradle
classpath 'com.github.jengelman.gradle.plugins:gradle-processes:0.3.0'
apply plugin: 'com.github.johnrengelman.processes'
此插件为您提供对任务执行的分叉进程的支持。
task startSpringBoot(type: JavaFork)
description = 'Start Spring Boot in the background.'
group = 'Load Test'
classpath = sourceSets.main.runtimeClasspath
main = 'webservice.Application'
但最后我选择了不同的方法,不部署spring boot应用程序,但仍然调用java代码来做我的事情。
【讨论】:
【参考方案2】:由于您使用的是 Gradle,因此您可以使用 GradleBuild
任务而不是 JavaExec
任务,如下所示:
task startSpringBoot(type: GradleBuild)
tasks = ['bootRun']
【讨论】:
不幸的是第二个任务,它在 start 之后执行SpringBoot 没有启动,因为第一个没有结束。所以任务执行挂在startSpringBoot。我认为我们需要分叉流程。我会检查是否有并行执行的好任务。以上是关于如何在分叉进程上使用 gradle 任务启动 Spring Boot 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 Gradle 测试任务在我的 JUnit 上启用调试