TomcatからSpringbootを起動してwarに到達するとTomcatがオフになるホットスポット


議題


SpringBootベースのフレームワークとして開発し,TomcatでWarファイルにコンパイルした.
この過程で自動的に死亡する症状が現れます.
SpringBootとして開発されていないため,その理由を特定するためにはSpringBootの構造や駆動を知る必要がある.
また、DBはHikariを使ったDB接続を使用していますが、当社で初めて使用した技術です.
*バージョンの内容
Spring Boot version : 2.6.3
Tomcat Version : 8.5

💥 予想される理由


1.ダブルスタートスプリングガイド
SpringbootをサーバログでTomcatに起動すると、ログでスプリングブートを2回実行するようになります.
同じログが2回撮られました.
最初は、springブートの詳細が不明で、Tom catlogの設定中にエラーが発生し、ログが発生しました.
catalinaログで2回撮る場合もあるので.
2. Registered driver with driverClassName=oracle.jdbc.driver.OracleDriverが見つかりません.エラーを直接インスタンス化しようとします.
これは、デバッグログで見つかったエラーログです.
Oracle 9以降はOraclejdbc.OracleDriverを使用します.
oracle.jdbc.driver.OracleDriverを使用するとエラーが発生しますが、これは自分に適したドライバを自動的に見つけてログを使用するため、少し疑っていますが、あまり期待していません.
3.Spring BootとTomcatバージョンの互換性
現地では正常に稼働しており、長期間使用しなくても問題ないそうです.
ローカルのTomcatバージョンは9.0です.
サーバのTomcatバージョンは8.5
これはTomcatバージョンが互換性がないからだと思います.

💬 原因の特定


1.Spring BootとTomcatバージョンの互換性
Tomcatバージョンをローカルで使用するバージョンに変更
Tomcat Release Note
Apache Tomcat 9.xは最新バージョンで、現在はまだ不安定です.
Tomcat 8.0.xと8.5.xに基づき、サーブレット4.0、JSP 2.3、EL 3.0、WebSocket 1.1、JASPIC 1.1仕様(Java EE 8プラットフォームに必要なバージョン)を実施する.
次のような機能があります.
HTTP/2のサポートを追加(Java 9(Apache Tomcat 9.0.0.1 M 18以降)またはTomcatネイティブライブラリをインストールする必要があります)
OpenSSLでTLSをサポートするサポートをJSSEコネクタ(NIOとNIO 2)とともに追加します.
TLS仮想ホスティング(SNI)のサポートを追加します.
2. Registered driver with driverClassName=oracle.jdbc.driver.OracleDriverが見つかりません.エラーを直接インスタンス化しようとします.
このドライバを正しく捉えていないとDBに接続されません.だからこの疑いの対象から除外します.
3.ダブルスタートスプリングガイド
現地テストでは極めて正常に稼働しているという.
Googleの検索結果によると、似たような症状の人は多くないという.
実際、猫の電源が切れる症状はありません.
ただし、サーバ上でTomcatを起動すると、2回実行されているように見えます.
これにより、実際には2つのプロセスは現れません.
第1ラウンド駆動で、自分でもう一度殺して、それからアップロードします.
しかし、スケジューラとインスタンスは死なない.
後で発生した場合は、以下のように処理できます.
なぜなら、1つのHostでappBaseとdocBaseが同じパスを表示しているからです.
Tomcatで同じWebアプリケーションコンテキストが2つあると、問題が発生する可能性があります.
appBase:複数のwebappを含む親ディレクトリ
docBase:実際に実行されているプロジェクトディレクトリ
駆動時、Tomcatはwebapps上で1回実行し、projectwarのパッケージをキャンセルし、もう一度実行します.
二重表示ではありませんが、このスケジューラは死なないそうです.
[변경전]
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
         <Context path="/" docBase="war/ZEPOINT_IF.war" reloadable="false"/>


[변경후]         
      <Host name="localhost"  appBase=""
            unpackWARs="true" autoDeploy="false">
         <Context path="/" docBase="war/ZEPOINT_IF.war" reloadable="false"/>

トラブルシューティング


[2022.03.18]
Tomcatバージョンを9.0以降に変更すると、この現象は解決されます.
いずれにしても、二重実行の部分では、猫が再起動する症状はあまり見られず、後で他の症状が現れる可能性があります.
しかし、今回の事件に対する答えはバージョンだ.
SpringBootとTomcatのバージョンが一致しないためかもしれません.