27.

Spring Boot のポート番号変更方法完全ガイド

編集
この記事の要点
  • Spring Boot のデフォルトポートは 8080。変更は application.propertiesserver.port=8081
  • YAML 派なら application.ymlserver:\n port: 8081
  • コマンドライン: java -jar app.jar --server.port=8081mvn spring-boot:run -Dspring-boot.run.arguments=--server.port=8081
  • 環境変数: SERVER_PORT=8081(コンテナ運用に最適)
  • ランダムポート: server.port=0 でテスト時に空きポート自動割当。プロファイル別に application-prod.properties で本番ポートを分ける

変更方法 5 通り

方法記述場所用途
1. properties ファイルapplication.properties標準
2. YAML ファイルapplication.yml階層が深い場合
3. コマンドライン引数--server.port=8081一時変更
4. 環境変数SERVER_PORT=8081Docker / クラウド
5. プログラマティックJava コード動的に変える場合

上から下の順に優先度が高くなります(後から指定された値が勝つ)。コマンドライン > 環境変数 > プロファイル > application.properties が一般的な並びです。

1. application.properties で指定

# src/main/resources/application.properties

# ポート番号
server.port=8081

# バインドアドレス(デフォルトは 0.0.0.0 = 全 IF)
server.address=127.0.0.1

# コンテキストパス(http://host:8081/api でアクセス)
server.servlet.context-path=/api

2. application.yml で指定

# src/main/resources/application.yml
server:
  port: 8081
  address: 127.0.0.1
  servlet:
    context-path: /api
  tomcat:
    threads:
      max: 200

3. コマンドライン引数

# jar 実行
java -jar app.jar --server.port=8081

# Maven プラグイン経由
mvn spring-boot:run -Dspring-boot.run.arguments=--server.port=8081

# Gradle プラグイン経由
./gradlew bootRun --args='--server.port=8081'

# JVM プロパティとして渡す方法
java -Dserver.port=8081 -jar app.jar

4. 環境変数で指定

Spring Boot はプロパティ名のドット → アンダースコア + 大文字で環境変数を自動マッピングします。server.portSERVER_PORT に対応します。Docker / Kubernetes 運用ではこの方法が定番です。

# Linux / Mac
export SERVER_PORT=8081
java -jar app.jar

# Windows PowerShell
$env:SERVER_PORT = "8081"
java -jar app.jar
# Dockerfile
FROM eclipse-temurin:21-jre
COPY app.jar /app.jar
ENV SERVER_PORT=8081
EXPOSE 8081
ENTRYPOINT ["java", "-jar", "/app.jar"]
# Kubernetes Deployment
spec:
  containers:
    - name: app
      image: myapp:latest
      env:
        - name: SERVER_PORT
          value: "8081"
      ports:
        - containerPort: 8081

5. プログラマティック(動的指定)

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import java.util.Properties;

@SpringBootApplication
public class App {
    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(App.class);

        Properties props = new Properties();
        props.put("server.port", 8081);
        app.setDefaultProperties(props);

        app.run(args);
    }
}

ランダムポート (テスト用)

server.port=0 にするとOS が空きポートを自動割当します。並列テストやポート競合回避に便利です。

# src/test/resources/application.properties
server.port=0
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class AppIntegrationTest {

    @LocalServerPort
    private int port;     // 実際に割り当てられたポート

    @Autowired
    private TestRestTemplate rest;

    @Test
    void hello() {
        String url = "http://localhost:" + port + "/hello";
        assertEquals("Hello", rest.getForObject(url, String.class));
    }
}

プロファイル別の設定

環境ごとに異なるポートを使う場合はプロファイル別 properties を用意します。application-{profile}.properties という命名規則です。

# application.properties(共通)
spring.application.name=myapp

# application-dev.properties(開発)
server.port=8080
logging.level.root=DEBUG

# application-stg.properties(ステージング)
server.port=8081

# application-prod.properties(本番)
server.port=80
logging.level.root=WARN
# プロファイル指定
java -jar app.jar --spring.profiles.active=prod
# または
SPRING_PROFILES_ACTIVE=prod java -jar app.jar
# または application.properties で
# spring.profiles.active=dev

HTTPS ポートと SSL

# HTTPS で起動
server.port=8443
server.ssl.enabled=true
server.ssl.key-store=classpath:keystore.p12
server.ssl.key-store-password=changeit
server.ssl.key-store-type=PKCS12
server.ssl.key-alias=tomcat

# 自己署名証明書を生成(開発用)
# keytool -genkeypair -alias tomcat -keyalg RSA -keysize 2048 \
#   -storetype PKCS12 -keystore keystore.p12 -validity 3650

HTTP と HTTPS を両方受けたい場合は WebServerFactoryCustomizer で追加コネクタを定義します。

@Bean
public WebServerFactoryCustomizer servletContainer() {
    return factory -> {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setPort(8080);          // HTTP も同時に listen
        factory.addAdditionalTomcatConnectors(connector);
    };
}

ポート競合トラブル

***************************
APPLICATION FAILED TO START
***************************

Description:
Web server failed to start. Port 8080 was already in use.

Action:
Identify and stop the process that's listening on port 8080 or
configure this application to listen on another port.
OS使用中ポート確認プロセス kill
Linux / Maclsof -i :8080 / ss -lntpkill -9
Windowsnetstat -ano | findstr 8080taskkill /PID /F

1024 未満のポート (well-known ports)

Linux では 1024 未満のポート (80 / 443) はデフォルトで root 権限が必要です。本番運用では以下のいずれか:

  • リバースプロキシ (nginx / ALB) を前段に置いて、Spring Boot は 8080 で動かす(推奨)
  • setcap 'cap_net_bind_service=+ep' /path/to/java で Java バイナリに権限付与
  • iptables で 80 → 8080 リダイレクト
  • Docker で -p 80:8080 としてホスト側ポートをマッピング

Embedded Tomcat / Jetty / Undertow

Spring Boot はデフォルトでEmbedded Tomcatを使います。server.port はすべての embedded サーバで共通で動作します。サーバを切り替えても変更不要です。



  org.springframework.boot
  spring-boot-starter-web
  
    
      org.springframework.boot
      spring-boot-starter-tomcat
    
  


  org.springframework.boot
  spring-boot-starter-jetty

FAQ

Q: 設定したのに反映されない
A: 優先度の高い場所で上書きされている可能性。コマンドライン引数や環境変数 SERVER_PORT を確認。--debug 起動でプロパティ評価過程が見られる。

Q: 起動時のログに「Tomcat started on port(s): 8081」と出るが繋がらない
A: server.address127.0.0.1 になっていてループバックしか受けつけていない可能性。0.0.0.0 に変更。または OS / クラウドのファイアウォール。

Q: 1 つの Spring Boot アプリで複数ポートを listen したい
A: 上記 WebServerFactoryCustomizer で追加コネクタを定義。アクチュエータ専用に management.server.port を分けるのも定石。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. インストール(eclipseプラグイン)
  2. クイックスタート
  3. プロジェクトの作成
  4. Spring Bootプロジェクトの作成
  5. Spring Bootプロジェクトの実行
  6. Spring BootでHello World!
  7. アノテーション一覧
  8. DB接続設定からエンティティおよびリポジトリの作成、値の取得まで(JPA編)
  9. DB接続設定や値の取得(JdbcTemplate編)
  10. ビューから値をモデルに格納しコントローラーで受け取る方法
  11. コントローラーにてモデルに値を格納してビューに渡す方法
  12. テンプレートエンジン
  13. ModelとModelAndViewの違い
  14. AOPの使用方法
  15. classpath: 内部ファイルの読み込み
  16. file: 外部ファイルの読み込み
  17. CSVファイルアップロード方法(Ajax)
  18. CSVファイルダウンロード方法(Ajax)
  19. Spring Bootプロジェクトのビルドと本番環境へのデプロイ方法(内部tomcat使用)
  20. Application.propertiesの環境依存設定の分割方法
  21. JPAにおけるEntityManagerの取得方法
  22. JPAにおけるjava.sql.Connectionの取得方法
  23. エラー一覧
  24. jarの引数を受け取る方法
  25. Spring BootでGmailからメール送信
  26. 複数のDBに接続する設定(Spring Boot & JPA編)
  27. ポート番号の変更
  28. Basic認証の実装と特定のURLに限定する方法
  29. Spring SecurityのBasic認証の無効化
  30. 独自のエラーページを定義する方法
  31. プロパティファイルの値やjar実行時の引数を取得する方法