設定手順:
1、相続SpringBootServletInitializer
-
容器の外側の展開、それは、main関数の適用に関するのではなく、頼ることはできませんSpringアプリケーションコンテキストを開始するためにweb.xml構成ファイルと同様に、我々は、継承SpringBootServletInitializer設定および実装するメソッド内のクラスを開始する必要があります。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
@SpringBootApplication
public class SdkCmsApplication extends SpringBootServletInitializer {
/**
* @Title: 使用外置tomcat部署
* @MethodName: configure
* @param application
* @Return org.springframework.boot.builder.SpringApplicationBuilder
* @Exception
* @Description:
*
* @author: FLY
* @date: 2019-05-24 14:02
*/
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(SdkCmsApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(SdkCmsApplication.class, args);
}
}
- このタイプの構成の役割は、類似したweb.xmlリスナーの役割でSpringアプリケーションコンテキストを初期化するための責任があるが、追加のXMLファイルに記述する必要はありません。
2、のpom.xml関連する設定Tomcatを変更
フォローアップの問題があったのは、依存関係のMavenのスコープのスコープの概念を導入しています。
依存関係の範囲は、Mavenは、いくつかの依存範囲があり、使用および制御の3種類がCLASSPATHに依存している(コンパイラクラスパス、テストクラスパスは、CLASSPATHを実行する)である以下の通りであります:
コンパイル:依存範囲をコンパイルします。指定しない場合、デフォルトでは、スコープに依存します。、テストをコンパイルするには、この依存レンジMavenの依存関係を使用して、三つのクラスパスの操作は有効です。典型的な例は、バネコードで、コンパイル、テスト、および実行するために時間的に依存関係を使用する必要があります。
テスト:テストは範囲を依存しています。Mavenの依存関係の時間依存の範囲を使用しますが、これはコンパイルされたコードの使用に依存している、またはメインプロジェクトを実行に使用することはできません、唯一のテストクラスパスに有効です。典型的な例は、それだけテストを実行するときにコンパイルとテストコードが要求される、Jnuitあります。
提供:依存範囲を提供します。実行するための時間にクラスパスをコンパイルし、テストするための効果的なこの依存範囲Mavenの依存関係を使用しますが、ありません。典型的な例は、必要なときに依存しているアイテムをコンパイル、テスト、サーブレットAPIですが、プログラムが実行されている場合、コンテナので提供し、繰り返しのMavenを再度導入する必要はありません。
より範囲の説明、参照:https://blog.csdn.net/fly910905/article/details/78089359
あなたが戦争の最終パッケージの形式を変更したい場合は、スプリング・ブート・スターター・ウェブが埋め込まれたTomcatコンテナが含まれているため、あなたはまた、pom.xmlファイルを変更する必要がありますので、誤差が直接コンテナの競合の外部に展開します。
次のように解決するには2つの方法がありますが、
この方法の一つ:
<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>
ここでは組み込みのTomcatへの依存を取り除くため、戦争のパッケージを再生する必要がある、それはlibディレクトリのjarパッケージにTomcatの関連が含まれていないか、または起動時のエラーが発生します。
重要なキーポイントは、スコープ内のtomcat-埋め込む-碧玉が提供されなければならないということでもあります。
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
SpringBootServletInitializerがそこにこののjavax.servletをのjavax.servletに依存する必要がありますが、Tomcatの-埋め込む-碧玉、次のtomcat-埋め込むコアなので、無用が提供されている場合、そう、このサーブレットAPIジャー戦争の最後の戦いがあるでしょうTomcatの自分自身との競合。
キーポイントは、以下が言うには第二の方法に適合しています。
方法2:
これは、直接、次の設定を追加することができます。
ばねブートスタータTomcatはすなわちブートブートスプリング、スプリング埋め込みのTomcatのデフォルト設定であるとなりますので、別のTomcatに、パケット(依存)負パッキング時に提供されるように設定します実行し、春ブーツ組み込みTomcatが使用する必要がありますされていません。
<!--部署成war包时开启【同时支持war和jar启动部署】↓↓↓↓-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<!--部署成war包时开启【同时支持war和jar启动部署】↑↑↑↑-->
上記の説明は、役割を与えられている、非常に徹底され、長ったらしいありません
このアプローチの利点は、ということです開始し、外部のコンテナにデプロイするためにコマンドを-jar両方のjavaに適した戦争のパッケージをパッケージ化。
3、瓶になる戦争
<パッケージ>戦争</梱包>
4、問題への配慮
4.1、一貫性のプロジェクト名とパッケージ名
この時、パッケージの名前を標識し、application.propertiesする必要があります
server.contextパス= / SDK-CMS
ここに書かれたとして、SpringBooot2.x注server.servlet.contextパス=
首尾一貫した
<build>
<finalName>sdk-cms</finalName>
</build>
あなたがTomcatのコンテキストにWebアプリケーションをリリースしていないかのように変更されます
4.2、Tomcatのバージョン
SpringBoot2.xは、Tomcat8.5の上記のバージョンを使用してください