この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:3
ページ更新者:guest
更新日時:2026-06-11 07:07:02

タイトル: ポート番号の変更
SEOタイトル: 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 を分けるのも定石。