5.

Spring Boot プロジェクトの実行方法(mvn / gradle / jar / IDE / プロファイル)

編集
この記事の要点
  • Spring Boot アプリケーションの起動方法 5 種類を網羅: mvn spring-boot:run / gradle bootRun / java -jar / IDE / Docker
  • 実行時オプション: --server.port=8081--spring.profiles.active=prod--logging.level.root=DEBUG
  • デバッグ実行: java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -jar app.jar
  • JVM チューニング: -Xms512m -Xmx2g -XX:+UseG1GC + GraalVM Native Image 対応
  • 本番運用は systemd サービス化 / Docker / Kubernetes が定番。ヘルスチェック /actuator/health 必須

Spring Boot 起動の前提

Spring Boot アプリケーションは 組み込み Tomcat (or Jetty/Undertow) 同梱の Java SE アプリです。WAR をサーバへデプロイする伝統的な方式と違い、単独 Java プロセスとして起動するのが基本。最小構成は以下のようになります:

// src/main/java/com/example/Application.java
package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

方法1: Maven で起動(開発時に最も多い)

# プロジェクトルートで実行
mvn spring-boot:run

# プロファイル指定
mvn spring-boot:run -Dspring-boot.run.profiles=dev

# ポート / 起動引数
mvn spring-boot:run -Dspring-boot.run.arguments="--server.port=8081 --debug"

# JVM オプション
mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Xmx1g -Dfile.encoding=UTF-8"

# 環境変数経由
SPRING_PROFILES_ACTIVE=dev mvn spring-boot:run

# wrapper を使う(mvn をローカル版固定)
./mvnw spring-boot:run

方法2: Gradle で起動

# bootRun タスク(spring-boot-gradle-plugin が提供)
gradle bootRun

# プロファイル
gradle bootRun --args='--spring.profiles.active=dev'

# 起動引数
gradle bootRun --args='--server.port=8081'

# wrapper
./gradlew bootRun

# build.gradle で JVM 引数固定したい場合
# bootRun {
#     jvmArgs = ['-Xmx2g', '-Dfile.encoding=UTF-8']
#     systemProperty 'spring.profiles.active', 'dev'
# }

方法3: jar をビルドして起動(本番)

これが本番デプロイの標準形です:

# パッケージング
mvn clean package -DskipTests
# → target/myapp-1.0.0.jar (Executable Jar)

# Gradle なら
gradle bootJar
# → build/libs/myapp-1.0.0.jar

# 起動
java -jar target/myapp-1.0.0.jar

# プロファイル + ポート
java -jar target/myapp-1.0.0.jar \
    --spring.profiles.active=prod \
    --server.port=8080

# JVM オプション
java -Xms512m -Xmx2g -XX:+UseG1GC \
    -Dfile.encoding=UTF-8 \
    -Duser.timezone=Asia/Tokyo \
    -jar target/myapp-1.0.0.jar

# 環境変数経由(推奨:12-Factor)
SERVER_PORT=8080 \
SPRING_PROFILES_ACTIVE=prod \
SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/app \
SPRING_DATASOURCE_PASSWORD=secret \
java -jar app.jar

方法4: IDE から起動

IntelliJ IDEA

  1. 左ツリーで @SpringBootApplication の付いたクラスを開く
  2. main メソッド左の 緑▶ をクリック → Run / Debug
  3. Run Configuration で VM options に -Xmx2g、Program arguments に --server.port=8081
  4. Active profiles 欄に dev

Eclipse / Spring Tool Suite

  1. 右クリック → Run As → Spring Boot App
  2. Run Configurations → Spring Boot タブで Profile 設定

VS Code

Extension Pack for Java + Spring Boot Extension Pack を入れると同様にできます。

方法5: Docker / docker-compose

# Dockerfile (multi-stage build)
FROM eclipse-temurin:17-jdk AS build
WORKDIR /app
COPY . .
RUN ./mvnw clean package -DskipTests

FROM eclipse-temurin:17-jre
WORKDIR /app
COPY --from=build /app/target/*.jar app.jar
EXPOSE 8080
ENV JAVA_OPTS="-Xms512m -Xmx2g -XX:+UseContainerSupport"
ENTRYPOINT ["sh","-c","java $JAVA_OPTS -jar app.jar"]

HEALTHCHECK --interval=30s --timeout=3s --start-period=30s \
    CMD curl -f http://localhost:8080/actuator/health || exit 1
# docker-compose.yml
services:
  app:
    build: .
    ports:
      - "8080:8080"
    environment:
      SPRING_PROFILES_ACTIVE: prod
      SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/app
      SPRING_DATASOURCE_USERNAME: app
      SPRING_DATASOURCE_PASSWORD: secret
    depends_on:
      - db
  db:
    image: mysql:8.0
    environment:
      MYSQL_DATABASE: app
      MYSQL_USER: app
      MYSQL_PASSWORD: secret
      MYSQL_ROOT_PASSWORD: rootsecret

よく使う起動オプション

目的オプション
ポート変更--server.port--server.port=8081
プロファイル切替--spring.profiles.active--spring.profiles.active=prod,k8s
外部設定--spring.config.location--spring.config.location=file:./conf/
ログレベル--logging.level.--logging.level.org.springframework=DEBUG
バナー非表示--spring.main.banner-mode--spring.main.banner-mode=off
DB 接続--spring.datasource.url--spring.datasource.url=jdbc:mysql://...

リモートデバッグ起動

# JDWP を待ち受け(5005 番ポート)
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 \
     -jar target/myapp.jar

# Maven
mvn spring-boot:run \
  -Dspring-boot.run.jvmArguments="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005"

# IntelliJ の Remote JVM Debug 設定でホスト localhost, ポート 5005 にアタッチ

本番運用: systemd サービス化

# /etc/systemd/system/myapp.service
[Unit]
Description=My Spring Boot App
After=network.target

[Service]
Type=simple
User=app
Group=app
WorkingDirectory=/opt/myapp
ExecStart=/usr/lib/jvm/java-17-openjdk/bin/java \
    -Xms512m -Xmx2g \
    -Dfile.encoding=UTF-8 \
    -Duser.timezone=Asia/Tokyo \
    -jar /opt/myapp/app.jar \
    --spring.profiles.active=prod
SuccessExitStatus=143
Restart=on-failure
RestartSec=10
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now myapp
sudo systemctl status myapp
sudo journalctl -u myapp -f

ヘルスチェック (Spring Boot Actuator)



    org.springframework.boot
    spring-boot-starter-actuator
# application.yml
management:
  endpoints:
    web:
      exposure:
        include: health,info,metrics,prometheus
  endpoint:
    health:
      show-details: when-authorized
  health:
    db.enabled: true
    diskspace.enabled: true
# 起動確認
curl http://localhost:8080/actuator/health
# {"status":"UP","components":{"db":{"status":"UP"},"diskSpace":{"status":"UP"}}}

# Prometheus メトリクス
curl http://localhost:8080/actuator/prometheus

FAQ

Q: 起動はするが「Whitelabel Error Page」しか出ない
A: コントローラの @RequestMapping パスが間違っているか、コンポーネントスキャン対象外。Application クラスをパッケージのルートに置いてください。

Q: ポート 8080 が使用中で起動失敗
A: lsof -i:8080(macOS/Linux)or netstat -ano | findstr 8080(Windows)で占有プロセス特定。または --server.port=0 でランダムポート割当。

Q: native image でビルドしたい
A: GraalVM + spring-boot-starter-parent 3.0+mvn -Pnative native:compile。起動時間が 50ms 程度になります。

編集
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実行時の引数を取得する方法