マルチモジュールスプリングプロジェクトによるGradleデーモン


私は、春にマルチモジュールプロジェクトを扱っている方法を共有したいです.特に、Gradleデーモンを利用して、複数のWebアプリケーションを一度に起動する方法.

問題
私は、一緒に走らなければならない異なるウェブアプリから成るマルチモジュールプロジェクトを持っています.
私はその実行に気づいた
gradle :application_A:bootRun
そして、ApplicationCone Aが構築され、実行されると、
gradle :application_B:bootRun
つの異なるGradleデーモンは、2つの実行がeligible for using the same daemonであるとしても産卵します.
コマンドでチェックできます.
gradle --status
あなたは似たようなものを見るべきです
   PID STATUS   INFO
 23606 BUSY     3.5.1
 24703 BUSY     3.5.1
(私は知っています.
これは、Gradleデーモンがリソースの項で全く熱心で、異なったインスタンスを持つことが非常に目的を無視するので、大きなパフォーマンス影響を持ちます.

なぜそれが起こるのですか.
第2春アプリケーションが既存のデーモンを使用していない理由は、bootRunタスクが単に終了しないということです.この動作は、デーモンをBUSYの状態に保つので、ApplicationThank Bは新しいデーモンを生成する義務があります.

どうしたらいいですか.
Gradleデーモンを無効にしたくないとしたら(もちろん、問題は解決します).または、単に(例えば、IDEによって使われているTooling APIはデーモンを起動します)というわけではありません.
gradle :application_A:bootRun :application_B:bootRun
残念ながら、これは問題を解決しません.GradleはApplicationCone Aを喜んで実行しますが、終了しないまでもう一度タスクを停止します.だから、今回我々は1つだけのデーモンを持っても1つのアプリケーションを開始した🙄.

そう?
後者が実際に正しいアプローチであることがわかりますが、私たちはparallel executionを有効にしなければなりません.そして、それはgradleが並列に複数の仕事を走らせるのを許容します.特に、:application_B:bootRunが終了していなくても、それは:application_A:bootRunを実行します.
これは--parallelフラグを追加するのと同じくらい簡単です.
gradle :application_A:bootRun :application_B:bootRun --parallel
今、あなたは両方のアプリを見て、要求を待って実行してください😊.
Gradleの古いバージョンでは、これは十分ではありません.また、Gradleにそれが使用されている労働者の数を教えてください.さもなければ、--parallelのフラッグでさえ、実行が連続的であるように、そうでなければ1に固執します.--max-workersのフラグで簡単に解決できます.
gradle :application_A:bootRun :application_B:bootRun --parallel --max-workers=4