ホームページ  >  記事  >  Java  >  SpringBoot プロジェクトをパッケージ化して外部 Tomcat にリリースするときに発生する問題を解決する方法

SpringBoot プロジェクトをパッケージ化して外部 Tomcat にリリースするときに発生する問題を解決する方法

WBOY
WBOY転載
2023-05-10 17:49:141013ブラウズ

問題が発生したときの状況について話しましょう:

Spring Boot フレームワークを使用して小さな Web プロジェクトを初めて作成しようとしましたが、Intellij IDEA で正常に起動して実行できました。 Maven を使用してインストールを実行し、war パッケージを生成し、ローカル Tomcat に公開します。例外が発生します。主な例外情報は .....LifeCycleException です。いろいろ検索した結果、答えが見つかりました。

Spring Boot には Tomcat コンテナが埋め込まれているため、プロジェクトは jar パッケージとしてパッケージ化することでリリースできますが、Spring Boot プロジェクトを Tomcat にリリースできる war パッケージ プロジェクトにパッケージ化するにはどうすればよいでしょうか?

1.これを war パッケージ プロジェクトにパッケージ化する必要があるため、まず pom.xml ファイルのパッケージ化タイプを変更し、Spring Boot のデフォルトの jar を変更する必要があります。 to warForm;

2. 次に、Tomcat サーバーは Spring Boot Web プロジェクトに埋め込まれているため、war パッケージを Tomcat プロジェクトに公開したい場合は、次のようにする必要があります。 Spring Boot に埋め込まれた Tomcat パッケージの依存関係を除外するか、競合が発生した場合は、以下のコード内のコメントを開いてください。

<dependency>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter-web</artifactid>
  <!--
  <exclusions>
    <exclusion>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
    </exclusion>
  </exclusions>
  -->
</dependency>

言いたいのは、ローカル開発中のデバッグに Spring Boot 埋め込み Tomcat を引き続き使用したい場合は、次の依存関係を追加するだけです;

<dependency>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter-tomcat</artifactid>
  <scope>provided</scope>
</dependency>

3. Spring Boot リリース jarパッケージ Web プログラムのエントリ ポイントは、main 関数が配置されているクラスであり、@SpringBootApplication アノテーションが付けられます。ただし、war パッケージを tomcat に公開する場合は、SpringBootServletInitializer サブクラスを追加してその configure メソッドをオーバーライドするか、main 関数が配置されているクラスを SpringBootServletInitializer サブクラスから直接継承してその configure メソッドを上書きする必要があります。コード例は次のとおりです。

@SpringBootApplication
public class DemoApplication extends SpringBootServletInitializer {
   
  @Override
  protected SpringApplicationBuilder configure(
      SpringApplicationBuilder application) {
    return application.sources(DemoApplication.class);
  }
 
   
  public static void main(String[] args) {
    SpringApplication.run(DemoApplication.class, args);
  }
}

上記で、Spring Boot プロジェクトの war パッケージをパッケージ化するためのすべての手順が完了し、tomcat7 以降に公開できます。

最後に最も重要な点は、ローカルの Tomcat バージョンが springboot によって自動的に統合される 8.0 バージョンと一致しない場合です。問題も発生する可能性があります。解決策は次のとおりです。

私のローカル Tomcat バージョンは 8.0.28 で、サーバー上の Tomcat は 7.0.69 です。 Tomcat 7.0.70 をローカルにデプロイしたところ、同じエラーが報告されました。この問題は Tomcat のバージョンに関連していると確信しています。いろいろな方法で情報を探した結果、最終的に Stackoverflow で SpringBoot のデフォルトのサーブレット コンテナは Tomcat8

をベースにしているという外国人を見つけました。準備された war パッケージの中に Tomcat 関連の jar パッケージを見つけました。 Tomcat8 です。Tomcat8 を使用してください。埋め込みパッケージは Tomcat7 では使用できません。

SpringBoot プロジェクトをパッケージ化して外部 Tomcat にリリースするときに発生する問題を解決する方法

Tomcat の下位バージョンをサポートするには、Maven で Tomat バージョンを指定する必要があります。設定は次のとおりです。次のように:

<properties>
  <tomcat.version>7.0.69</tomcat.version>
</properties>

次に、それを依存関係に追加します(実際には追加しなくても問題ありません、公式ドキュメントには追加されています)

<dependency>
  <groupid>org.apache.tomcat</groupid>
  <artifactid>tomcat-juli</artifactid>
  <version>${tomcat.version}</version>
</dependency>

追加した後、試してみたところ、次のことがわかりました問題ないでしょう。 war パッケージの lib ディレクトリを見ると、確かに Tomcat7 パッケージになっています。

SpringBoot プロジェクトをパッケージ化して外部 Tomcat にリリースするときに発生する問題を解決する方法

#しかし、私はまだ少し混乱しています。パッケージがこのようにパッケージ化されている場合、Tomcat のバージョンを変更しますか? 再パッケージ化しますか?この制限はSpringBoot内のServletコンテナによるものなので、使用できないのでしょうか?色々な情報を調べた結果、解決策が見つかりました!

rree

以上がSpringBoot プロジェクトをパッケージ化して外部 Tomcat にリリースするときに発生する問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。