Java “启动多个梯度”;“弹簧靴”;插件";“bootRun”;并行任务

Java “启动多个梯度”;“弹簧靴”;插件";“bootRun”;并行任务,java,spring,gradle,spring-boot,Java,Spring,Gradle,Spring Boot,我有一个使用Gradle构建的多项目Spring Boot应用程序。我试图做的是从命令行使用Spring Boot的bootRun任务运行各种子项目,通过gradle bootRun执行一些“特殊”测试。然而,似乎每个守护进程都是按顺序启动和停止的。使用spring-Boot插件有没有办法让我的所有启动守护进程并行运行 任何建议都将不胜感激:)独立项目的任务可以使用--parallel标志并行执行 要并行执行多项目构建,用户必须通过命令行开关声明他们希望自己的项目并行执行: --parallel

我有一个使用Gradle构建的多项目Spring Boot应用程序。我试图做的是从命令行使用Spring Boot的
bootRun
任务运行各种
子项目,通过
gradle bootRun
执行一些“特殊”测试。然而,似乎每个守护进程都是按顺序启动和停止的。使用
spring-Boot
插件有没有办法让我的所有启动守护进程并行运行


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

独立项目的任务可以使用
--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`.
资源链接:

这里给出了一个完整的并行运行示例:

并行执行是如何工作的? 首先,您需要告诉Gradle使用并行模式。您可以使用命令行参数或配置生成环境。除非您提供特定数量的并行线程,否则Gradle会尝试根据可用的CPU内核选择正确的数量。每个并行工作者在执行任务时都独占一个给定的项目。这意味着来自同一项目的两个任务永远不会并行执行。因此,只有多项目构建才能利用并行执行。完全支持任务依赖关系,并行工作人员将首先开始执行上游任务。请记住,按字母顺序排列的解耦任务调度(从顺序执行中得知)在并行模式下并不真正起作用。您需要确保正确声明任务依赖项,以避免排序问题

资源链接:

从3.5版开始,Gradle可以打印并行工作人员状态:

<===========--> 90% EXECUTING
> :backend-service:bootRun
> :frontend-service:bootRun
90%执行
>:后端服务:引导运行
>:前端服务:引导运行

您是否尝试过Gradle的并行模式(
--parallel
)?有关此模式的详细信息,请参阅。@PeterNiederwieser更详细,谢谢!。虽然仍然有一些问题,但它可能与stdin有关,我相信有一个简单的解决方法。干杯@事实上,彼得尼德维泽似乎不起作用。我基本上阻塞了
System.in.read()
。是否有一种建议的方法来防止使用
bootRun
关机?谢谢,我不熟悉Spring Boot及其Gradle插件。@PeterNiederwieser我让一切都正常工作了。事实证明,我的一个应用程序没有非守护进程线程,因此它过早退出,因为stdin无法阻止。我注意到的一件事是,当我
SIGTERM
gradle时,它将孤立
——并行
进程。这是意料之中的吗?有没有办法指定应用程序启动的顺序?例如后端必须在前端之前启动?@MikeRylander对于顺序,您可以检查