并行启动多个 Gradle "spring-boot" 插件 "bootRun" 任务
Posted
技术标签:
【中文标题】并行启动多个 Gradle "spring-boot" 插件 "bootRun" 任务【英文标题】:Launch multiple Gradle "spring-boot" plugin "bootRun" tasks in parallel 【发布时间】:2014-06-30 13:33:15 【问题描述】:我有一个使用 Gradle 构建的多项目 Spring Boot 应用程序。我正在尝试做的是使用 Spring Boot 的 bootRun
任务从命令行运行各种 subprojects
,以通过 gradle bootRun
进行一些“临时”测试。但是,似乎每个守护进程都是按顺序启动和停止的。有没有办法让我的所有引导守护程序使用spring-boot
插件并行运行?
任何建议将不胜感激:)
【问题讨论】:
你尝试过 Gradle 的并行模式 (--parallel
) 吗?有关此模式的更多详细信息,请参阅Gradle User Guide。
@PeterNiederwieser 更接近了,谢谢!虽然仍然有一些问题,但它可能与标准输入有关,我相信有一个简单的解决方法。干杯!
@PeterNiederwieser 实际上,***.com/questions/13172137/… 似乎不起作用。我基本上阻止了System.in.read()
。有没有推荐的方法来防止bootRun
关机?干杯
我不熟悉 Spring Boot 及其 Gradle 插件。
@PeterNiederwieser 我让一切都在工作。原来我的一个应用程序没有非守护线程,所以它过早退出,因为 stdin 无法阻止。我注意到的一件事是,当我 SIGTERM
gradle 时,它会留下孤立的 --parallel
进程。这是意料之中的吗?
【参考方案1】:
独立项目的任务可以通过--parallel
标志并行执行。
要并行执行多项目构建,用户必须通过命令行开关声明他们希望他们的项目并行执行:
--parallel
\\ Tells Gradle to execute decoupled projects in parallel. Gradle will attempt to determine the optimal number of executors to use.
--max-workers=4
\\ Tells Gradle to execute decoupled projects in parallel, using the specified number of workers. The default is the number of processors.
与 Gradle 守护程序类似,应该可以在每个用户和每个项目的基础上启用/配置并行执行。这可以通过在gradle.properties
中设置的构建环境属性来完成:
org.gradle.parallel: When set to `true`, Gradle will execute with the parallel executer
org.gradle.workers.max: Specify the maximum number of workers to use for parallel execution. This property does not in itself enable parallel execution,
but the value will be used whether Gradle is executed with `--parallel` or `org.gradle.parallel=true`.
资源链接:
https://docs.gradle.org/current/userguide/gradle_command_line.html https://docs.gradle.org/current/userguide/build_environment.html这里给出了一个完整的并行运行示例: https://github.com/camiloribeiro/cucumber-gradle-parallel/blob/master/build.gradle#L50
并行执行是如何工作的?
首先,您需要告诉 Gradle 使用并行模式。您可以使用命令行参数(Appendix D, Gradle Command Line) 或配置您的构建环境(Section 12.1, “Configuring the build environment via gradle.properties”)。除非您提供特定数量的并行线程,否则 Gradle 会尝试根据可用的 CPU 内核选择正确的数量。每个并行工作者在执行任务时都独占一个给定的项目。这意味着来自同一个项目的 2 个任务永远不会并行执行。因此,只有多项目构建才能利用并行执行。完全支持任务依赖项,并行工作人员将首先开始执行上游任务。请记住,从顺序执行中知道的解耦任务的字母顺序调度在并行模式下并不真正起作用。您需要确保正确声明任务依赖项以避免排序问题。
资源链接: https://docs.gradle.org/current/userguide/multi_project_builds.html
从 3.5 版开始,Gradle 可以打印并行工作者状态:
<===========--> 90% EXECUTING
> :backend-service:bootRun
> :frontend-service:bootRun
【讨论】:
有没有办法指定应用程序的启动顺序?比如后端必须在前端之前启动? @MikeRylander 对于顺序,你可以检查github.com/camiloribeiro/cucumber-gradle-parallel/blob/master/…以上是关于并行启动多个 Gradle "spring-boot" 插件 "bootRun" 任务的主要内容,如果未能解决你的问题,请参考以下文章
appium+python自动化60-windows上同时启动多个appium服务,让多个android机器并行运行