并行启动多个 Gradle “spring-boot”插件 “bootRun” 任务

2022-09-03 02:30:47

我有一个使用Gradle构建的多项目Spring Boot应用程序。我试图做的是从命令行运行各种使用Spring Boot的任务,通过.但是,似乎每个守护程序都按顺序开始和停止。有没有办法让我所有的Boot守护进程使用插件并行运行?subprojectsbootRungradle bootRunspring-boot

任何建议将不胜感激,:)


答案 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://github.com/camiloribeiro/cucumber-gradle-parallel/blob/master/build.gradle#L50

并行执行如何工作?

首先,您需要告诉Gradle使用并行模式。您可以使用命令行参数(附录 D,Gradle 命令行)或配置构建环境(第 12.1 节 “通过 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

答案 2

推荐