SpringBoot TomCatの動作方法を変更する
2022-02-26 09:50:55
1. なぜSpringBootの実行方法を変更する必要があるのですか?
-
Tomcat Connector(コネクタ)には3つの動作モードがあります:bio nio apr
-
バイオ(ブロッキングI/O)
- つまり、ブロッキングI/O操作は、Tomcatが従来のJava I/O操作(つまり、java.ioパッケージとそのサブパッケージ)を使用していることを示し、JAVA HTTP/1.1コネクタに基づいて、Tomcat 7以下はデフォルトでbioモードで実行されていることを意味します。一般に、バイオ・モードは3つの動作モードの中で最も低性能です。サーバーの現在の状態は、Tomcat Managerで確認することができます。(Tomcat7以下、Linuxシステムでデフォルトで使用されます)。
- 1リクエストに1スレッド、デメリット:並行性が高い、スレッド数が多い、リソースの無駄遣い
-
nio(新規I/O)
- Java nioは、Java SE 1.4以降(つまりjava.nioパッケージとそのサブパッケージ)で提供される新しい形式のI/O操作である。Java nioはバッファベースのJava APIで、ノンブロッキングのI/O操作を提供するため、nioはノンブロッキングI/O(non-blocking IO)の頭文字をとったものとも見なされている。従来のI/O操作(バイオ)に比べて、同時実行性能が優れています。Tomcatをnioモードで動作させるには、Tomcatのインストールディレクトリ/conf/server.xmlの対応するプロトコルのプロパティの値を、org.apache.coyote.http11.Http11NioProtocolに変更するだけです。
-
<Connector port="1024" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443" />
-
apr(Apache Portable Runtime/アパッチポータブルランタイム)
- Tomcatは、Apache HTTPサーバのコアダイナミックリンクライブラリをJNIとして呼び出して、ファイルの読み込みやネットワーク転送の処理を行います。OSレベルから非同期IOの問題を解決する
- tomcat 8.0 以降はデフォルトでaprに対応済み(下位バージョンは急げば切り替え可能)
SpringBoot のデフォルトは
java -Xmx256m -Xss256k -jar xx.jar
を実行するために、Tomcatの内蔵起動メソッドはデフォルトでNIOなので、Aprで起動したい場合はどうすればいいのでしょうか?
2. SpringBoot内蔵のTomcatコンテナを削除します。
- pomファイルを変更する
jar</packaging> change to =>
war</packaging>
org.springframework.boot</groupId>
spring-boot-starter-web</artifactId>
<! -- Remove embedded tomcat plugin -- >
org.springframework.boot</groupId>
spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<! -- Removing the inline Tomcat requires re-adding the servlet -->
javax.servlet</groupId>
javax.servlet-api</artifactId>
${servlet.version}</version>
provided</scope>
</dependency>
package com.ctx.springboot;
import org.springframework.boot.autoconfigure;
import org.springframework.boot.builder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
@SpringBootApplication
public class SpringBootStartApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(SpringBootStartApplication.class);
}
}
関連
-
undefinedeclipse エラー。この行に複数のアノテーションが見つかりました: - 文字列を型解決に解決できない
-
jd-gui Java Exceptionが発生しました。
-
JQuery DataTable 详解
-
Eclipseプロンプトを実行する java仮想マシンを使用しない
-
java.lang.NoClassDefFoundError: org.apache.jasper.el.ELContextImpl クラスを初期化できませんでした。
-
IDEA パッケージステートメントの欠落
-
このラインで複数のマーカーを解決する方法
-
Java静的コード解析 - 仕様チェック - checkstyle
-
スレッド "main "での例外 java.lang.NullPointerException どのようにそれを解決するには?
-
エコー文字列を決定するためのjavaの簡単な実装をいくつか紹介します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
エラー java.util.NoSuchElementException
-
スレッド "main "での例外をEclipseで解決 java.lang.Error: 未解決のコンパイル問題、コンパイラとパッケージの不整合
-
Java のエラーです。未解決のコンパイル問題 解決方法
-
アクセス制限です。タイプ 'Application' は API ではありません。
-
javaで非静的な解を静的な参照にすることができない
-
Android Studio 3.1.2 で v4, v7 パッケージが見つからない シンボル 'AppCompatActivity' を解決できない
-
Javaクラスローダーにソースコードから潜り込む
-
javaでよく使われる英単語
-
java Exception problem: unhandled exception: java.lang.
-
VectorのJavaコレクションを徹底解析