1. 概要

Spring Boot Webアプリケーションには、デフォルトで事前構成された組み込みWebサーバーが含まれています。 ただし、状況によっては、カスタム要件を満たすためにデフォルト構成を変更したい場合があります。

このチュートリアルでは、application.propertiesファイルを使用してTomcat組み込みサーバーを構成するためのいくつかの一般的な使用例を見ていきます。

2. 一般的な組み込みTomcat構成

2.1. サーバーのアドレスとポート

変更したい最も一般的な構成は、ポート番号です。

server.port=80

server.port パラメーターを指定しない場合、デフォルトで8080に設定されます

場合によっては、 サーバーがバインドする必要のあるetworkアドレス。 つまり、サーバーがリッスンするIPアドレスを定義します。

server.address=my_custom_ip

デフォルトでは、値は 0.0.0.0、に設定されており、すべてのIPv4アドレスを介した接続が可能です。 別の値、たとえばlocalhost – 127.0.0.1 –を設定すると、サーバーの選択性が高まります。

2.2. エラー処理

デフォルトでは、SpringBootは標準エラーWebページを提供します。 このページはホワイトラベルと呼ばれます。 デフォルトでは有効になっていますが、エラー情報を表示したくない場合は、無効にすることができます。

server.error.whitelabel.enabled=false

ホワイトラベルへのデフォルトのパスは/errorです。 server.error.pathパラメーターを設定することでカスタマイズできます。

server.error.path=/user-error

エラーに関するどの情報を表示するかを決定するプロパティを設定することもできます。 たとえば、エラーメッセージとスタックトレースを含めることができます。

server.error.include-exception=true
server.error.include-stacktrace=always

チュートリアルRESTおよびホワイトラベルエラーページのカスタマイズの例外メッセージ処理では、SpringBootでのエラー処理について詳しく説明しています。

2.3. サーバー接続

リソースの少ないコンテナで実行する場合は、 CPUとメモリの負荷を減らしたい場合があります。これを行う1つの方法は、アプリケーションで処理できる同時リクエストの数を制限することです。 逆に、この値を増やして、より多くの利用可能なリソースを使用してパフォーマンスを向上させることができます。

Spring Bootでは、Tomcatワーカースレッドの最大数を定義できます。

server.tomcat.threads.max=200

Webサーバーを構成する場合は、サーバー接続タイムアウトを設定すると便利な場合があります。 これは、サーバーが接続後にクライアントが要求を行うのを待ってから接続が閉じられるまでの最大時間を表します。

server.connection-timeout=5s

リクエストヘッダーの最大サイズを定義することもできます。

server.max-http-header-size=8KB

リクエスト本文の最大サイズ:

server.tomcat.max-swallow-size=2MB

または、投稿リクエスト全体の最大サイズ:

server.tomcat.max-http-post-size=2MB

2.4. SSL

Spring BootアプリケーションでSSLサポートを有効にするには、server.ssl.enabledプロパティをtrueに設定し、SSLプロトコルを定義する必要があります。

server.ssl.enabled=true
server.ssl.protocol=TLS

また、パスワード、タイプ、および証明書を保持するキーストアへのパスを構成する必要があります。

server.ssl.key-store-password=my_password
server.ssl.key-store-type=keystore_type
server.ssl.key-store=keystore-path

また、キーストアでキーを識別するエイリアスも定義する必要があります。

server.ssl.key-alias=tomcat

SSL構成の詳細については、SpringBootの記事にある自己署名証明書を使用したHTTPSにアクセスしてください。

2.5. Tomcatサーバーアクセスログ

Tomcatアクセスログは、ページのヒット数やユーザーセッションアクティビティなどを測定するときに役立ちます。

アクセスログを有効にするには、次のように設定するだけです。

server.tomcat.accesslog.enabled=true

また、ログファイルに追加されるディレクトリ名、プレフィックス、サフィックス、日付形式などの他のパラメータも設定する必要があります。

server.tomcat.accesslog.directory=logs
server.tomcat.accesslog.file-date-format=yyyy-MM-dd
server.tomcat.accesslog.prefix=access_log
server.tomcat.accesslog.suffix=.log

3. 組み込みTomcatのバージョン

application.propertiesファイルを構成して使用されているTomcatのバージョンを変更することはできません。 これはもう少し複雑で、主に spring-boot-starter-parentを使用するかどうかによって異なります。

ただし、先に進む前に、それぞれが Spring Bootリリースは、特定のTomcatバージョンに対して設計およびテストされています。 変更すると、予期しない互換性の問題が発生する可能性があります

3.1. spring-boot-starter-parentを使用する

Mavenを使用し、 spring-boot-starter-parent から継承するようにプロジェクトを構成する場合、 pom.xml の特定のプロパティを上書きすることで、個々の依存関係をオーバーライドできます。

そのことを念頭に置いて、Tomcatのバージョンを更新するには、tomcat.versionプロパティを使用する必要があります。

<properties>
    <tomcat.version>9.0.44</tomcat.version>
</properties>

3.2. springの使用-boot-dependencies

spring-boot-starter-parentを使用したくないまたは使用できない状況があります。 たとえば、SpringBootプロジェクトカスタム親を使用する場合。 このような場合でも、 spring -boot-dependency を使用して、依存関係管理の恩恵を受ける可能性が高くなります。

ただし、この設定では、前のセクションで示したように、Mavenプロパティを使用して個々の依存関係をオーバーライドすることはできません。

同じ目標を達成し、別のTomcatバージョンを使用するには、pomファイルのdependencyManagementセクションにエントリを追加する必要があります。 覚えておくべき重要なことは、の前にspring-boot-dependenciesに配置する必要があるということです。

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-core</artifactId>
            <version>9.0.44</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.4.5</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

4. 結論

このチュートリアルでは、いくつかの一般的なTomcat組み込みサーバー構成について学習しました。 より多くの可能な構成を表示するには、公式のSpringBootアプリケーションのプロパティドキュメントページにアクセスしてください。

いつものように、これらの例のソースコードは、GitHubから入手できます。