Development Java

Spring Bootで複数ポートを設定する方法

投稿日:

Spring Bootのアプリケーションで、同じアプリケーションを複数のポートでリッスンさせたいという要件があり、調べてみました。

英語のサイトなどでサンプルがあったものの、Spring Boot 2.x系ですぐに使えるサンプルがなかったのでこちらで紹介しておきます。

要件、前提など

  • Spring Boot 2.x (実際に使用したのは2.1.2.RELEASE)
  • 一つのインスタンスで複数ポートをリッスンさせたい、例: 8654, 30212, 30224
  • 接続はプレーンなHTTPでSSLは必要ない

Spring Bootのポートを変更する方法

まず、Spring Bootでサーバーのポートを変更する方法を確認しておきましょう。

Spring Bootは、何も指定しないとデフォルトでポート8080が使用されます。

このポートの設定は、application.propertiesまたはapplication.ymlファイルで上書きできます。

設定ファイルで上書きする方法

application.ymlの場合

application.propertiesの場合

コマンドラインで実行時に指定する方法

実行時のコマンドラインオプションに

を指定することでポートを指定することもできます。

例えば

といった感じですね。

ランダムなポートを使用する場合

ポート番号を0にすると、ランダムな空きポートが使用されます。ローカルな開発環境やテスト時に使用されるかもしれません。

複数のポートをリッスンさせる方法

server.port のプロパティを使うとポートを変更することはできますが、複数のポートで待ち受けることはできません。

これを変更するにはコードを書く必要があります。

Spring Bootは、デフォルトでTomcatを使用するので、Tomcatに複数のコネクターを作成して、それぞれにポートを割り当てる必要があります。

以下は、その設定を行うコードです。

 

アプリケーションの起動時にTomcatServletWebServerFactoryを受け取り、server.additionalPortsというプロパティの値に基づいてTomcatのConnectorを追加しています。

 

そしてapplication.ymlには以下の値を追加します。

3つのポートでTomcatが移動されたことがログで確認できます。

 

-Development, Java

Copyright© 技術系のメモ , 2019 All Rights Reserved.