最近、私のプロジェクトで、いくつかのタスクを非同期で実行する必要がありました。Tomcat 内で Spring を使用して Web アプリケーションを実行しているため、Spring が提供する ThreadPoolTaskExecutor が解決策でした。
しかし、アーキテクトは、webapp でスレッドを生成する/スレッド プールを持つことは恐ろしい/禁止されている/絶対的な悪であると述べて、いくつかの異議を唱えました。
ネットと StackOverflow を少し調べてみたところ、Java EEコンテナー内に独自のスレッド プールを配置するのは悪い習慣であることがわかりました。その理由は、独自のスレッド プールがある場合、コンテナーはそれを認識せず、リソースを適切に管理できないというものでした。これは、Web アプリケーションのホット デプロイを行う必要がある場合に特に重要です。
ここでのユース ケースは、Tomcat 内で実行される Spring Web アプリケーションです。まず、Spring コンテナを軽いJava EEコンテナのように考えてよい でしょうか。この場合、スレッドプールのライフサイクルを直接管理するのは Spring であり、アプリケーション自体ではありませんね。
第 2 に、ホット デプロイメントの議論はこの構成にも適用されますか?
はい、Tomcat でワーカー プールを直接宣言し、JNDI を介して Spring に注入できることはわかっています。ただし、Spring が提供する直接の ThreadPoolTaskExecutor 機能と比べると少し面倒です。
私の最後の質問は、アーキテクトの異議は私の場合に関連していますか?
このトピックに関するご提案やご意見をお寄せいただきありがとうございます。