Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
生徒
「Spring Bootの最新バージョンって、Javaのどのバージョンと一緒に使えるんですか?」
先生
「良いところに気がつきましたね。Spring Bootのバージョンごとに、対応しているJavaのバージョンが決まっているんですよ。」
生徒
「へぇ〜!じゃあSpring Boot 3.5とか3.4は、Java 21とか使えるんですか?」
先生
「もちろん、それぞれに対応表があるので、一緒に確認していきましょう!」
1. Spring BootとJavaのバージョン互換性を知る重要性
「1. Spring BootとJavaのバージョン互換性を知る重要性」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。
Spring BootとJavaの組み合わせが合っていないと、ビルドは通っても本番で動かない、あるいは起動すらできない――という事故につながります。特に新しいSpring Bootでは対応するJavaが絞られるため、「どのBootに、どのJavaが合うか」を最初に押さえることが安定運用の近道です。
実務ではLTS(長期サポート)であるJava 21/17を使う場面が多く、互換性を把握しておけば、開発・テスト・本番の環境差で起こるトラブルを未然に防げます。例えば、ローカルをJava 21でコンパイルし、本番のJREがJava 17のままだと、次のような起動エラーが出ることがあります。
java.lang.UnsupportedClassVersionError: ... has been compiled by a more recent version of the Java Runtime
(Unsupported class file major version 65)
初心者向けの簡単チェック(小さなサンプル)
# 1) 実行中JDKのバージョンを確認
java -version
# 2) プロジェクトの設定ファイルで指定バージョンを確認
# - Gradle: build.gradle / gradle.properties
# - Maven : pom.xml
# 3) 記事内の「対応表(後述)」と見比べて合っているかを確認
ポイントは、〈実行するJRE〉と〈ビルドに使うJDK〉、そして〈Spring Bootの対応範囲〉の三つをそろえること。たったこれだけで、よくある「起動できない」「意味不明なエラーが出る」を大幅に減らせます。
2. Spring Boot 3.5/3.4/3.3 と Java 21/17 の対応表
まずは「どのSpring Bootに、どのJavaが対応しているか」を一覧で確認しましょう。表の見方はかんたんです。左があなたのSpring Bootの系(3.5・3.4・3.3など)、右が一緒に使えるJavaの系(21・17)です。自分の組み合わせが表に含まれていれば基本OK、含まれていなければ要見直しです。
| Spring Bootバージョン | 対応するJavaバージョン |
|---|---|
| 3.5.x | Java 21 / Java 17 |
| 3.4.x | Java 21 / Java 17 |
| 3.3.x | Java 21 / Java 17 |
| 3.2.x | Java 17(Java 21は一部非対応) |
| 3.1.x | Java 17 |
使い方のコツ(例):
「Boot 3.5 × Java 21」はOK/「Boot 3.4 × Java 17」もOK。いっぽう「Boot 3.2 × Java 21」は非対応の箇所が残るため避けるのが安全です。迷ったら、表で交差する組み合わせかどうかを最初に確認しましょう。
初心者向けミニサンプル(自分の環境を3ステップで照合)
# 1) Spring Bootの版をメモ(例: 3.4.2)
# build.gradle / pom.xml の指定値をチェック
# 2) Javaの版を確認
java -version # 例: "21" または "17"
# 3) 上の対応表で「行(Boot)」×「列(Java)」が合っていればOK
# 合わなければ、Bootを上げる or Javaを合わせる
ポイントは「表に載っている組み合わせを選ぶ」こと。これだけで起動エラーや不可解な挙動を避けやすくなります。次の章の詳細を見る前に、まずはあなたの現在値を表に当てて確認してみてください。
3. Javaバージョンごとの特徴と選び方
同じSpring Bootでも、使うJavaで「書きやすさ」「性能」「周辺ライブラリの対応」が変わります。まずはJava 21とJava 17の性格をざっくり把握し、あなたの現場に合わせて選びましょう。迷ったら、下の「かんたんチェックリスト」で当てはめると決めやすくなります。
- Java 21:LTS。仮想スレッド(virtual threads)で軽量な並行処理、switchのパターンマッチングなど最新言語機能が安定利用可。新規開発や性能・保守性を伸ばしたい場合に有力。
- Java 17:LTS。企業での実績が厚く、ミドルウェアやプラグインの対応情報が豊富。既存資産の移行・安定稼働を最優先するならこちらが無難。
初心者向けミニサンプル:Java 21の書き方と、Java 17でも動く書き方
// 【Java 21】switchのパターンマッチング例(21でコンパイル)
static String kind(Object o) {
return switch (o) {
case Integer i -> "整数: " + i;
case String s -> "文字列: " + s;
case null -> "null";
default -> "その他";
};
}
// 【Java 17】同じ意図をif/elseで表現(17でもコンパイル)
static String kind(Object o) {
if (o == null) return "null";
if (o instanceof Integer i) return "整数: " + i;
if (o instanceof String s) return "文字列: " + s;
return "その他";
}
かんたんチェックリスト
- 新規開発で最新言語機能を使いたい/高負荷の並行処理を軽くしたい → Java 21
- 既存システムや社内標準がJava 17に固定/利用ライブラリが17中心 → Java 17
- Spring Bootは3.3以上でJava 21を想定、3.1〜3.2系ならまずは17で安定運用
要するに、新規×攻め=21、既存×安心=17という考え方でOK。チーム方針と依存ライブラリの対応状況を見て、無理なく選択しましょう。
4. GradleやMavenでのJavaバージョン指定方法
「4. GradleやMavenでのJavaバージョン指定方法」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。
実際にSpring BootのプロジェクトでJavaのバージョンを指定するには、ビルドツールで設定します。
たとえば、GradleでJava 21を使うには以下のように設定します。
java {
sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_21
}
Mavenの場合はこちら:
<properties>
<java.version>21</java.version>
</properties>
こうした記述があるかどうかを確認することで、プロジェクトが使用するJavaバージョンを明確にできます。
5. Spring Bootのバージョン確認方法と変更方法
既存のプロジェクトでSpring Bootのバージョンを確認したい場合、build.gradleやpom.xmlファイル内のバージョン指定を見てみましょう。
plugins {
id 'org.springframework.boot' version '3.5.0'
}
バージョンを変更する際は、他の依存関係がそのバージョンに対応しているかも一緒に確認することが大切です。特にセキュリティ関連のライブラリや、テンプレートエンジン(Thymeleafなど)は注意が必要です。
6. Spring BootとJavaバージョンの注意点まとめ
- Spring Boot 3.5・3.4・3.3 は Java 21 / Java 17 に対応
- Java 21を使うにはSpring Boot 3.3以降が推奨
- プロジェクトの
build.gradleまたはpom.xmlでバージョン指定を確認 - Java 21を使うなら、ライブラリの対応状況にも注意
Spring BootのバージョンとJavaバージョンの互換性を意識しておくことで、よりスムーズにアプリケーション開発を進めることができます。
7. 実務で遭遇する「起動エラー」とその解決策
「7. 実務で遭遇する「起動エラー」とその解決策」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。
互換性表の通りに設定しても、いざ実行するとエラーで動かないことがあります。最も多い原因は、コンパイルしたJavaのバージョン(JDK)と、実際に動かす場所(サーバーや実行用JRE)の不一致です。以下のエラーメッセージが出たら、まずはバージョン設定を疑いましょう。
よくある致命的なエラー:UnsupportedClassVersionError
java.lang.UnsupportedClassVersionError: ... has been compiled by a more recent version of the Java Runtime (class file version 65.0)
この「version 65.0」という数字はJava 21を指しています。「Java 21でビルドしたのに、実行環境がJava 17以下のままである」という矛盾が起きている証拠です。この場合、実行環境のJavaを上げるか、ビルド設定を17に落とす必要があります。
初心者向けチェックリスト:エラーを即座に消す3ステップ
# 1) サーバー(実行環境)のJava版を確認
java -version
# 2) ビルドツール(Gradle/Maven)の targetCompatibility を1に合わせる
# 3) 再ビルドして反映。これだけで「意味不明なエラー」の8割は解決します。
ポイントは、「Spring Boot 3.3以上をフルに活かすなら、実行環境もJava 21(または17)で揃える」こと。ここを徹底するだけで、環境構築による無駄なタイムロスを劇的に減らせます。
8. Spring Boot 3.3以降 × Java 21 で得られる「現場の恩恵」
互換性があるから仕方なくバージョンを合わせるのではなく、あえて「最新の組み合わせ」を選ぶメリットも知っておきましょう。特にSpring Boot 3.3以降とJava 21の組み合わせは、**「仮想スレッド(Virtual Threads)」**という強力な武器が使えます。
これまでのJavaでは、アクセスが増えるとサーバーのスレッドが枯渇し、動作が重くなるのが悩みでした。しかしJava 21からは、軽量なスレッドを数百万規模で扱えるようになり、設定一つでパフォーマンスを劇的に向上させることが可能です。
最新環境で仮想スレッドを有効化する魔法の一行(application.properties)
# Spring Boot 3.2以上 + Java 21の環境なら、これだけで爆速化を狙えます
spring.threads.virtual.enabled=true
この一行を追加するだけで、大量のリクエストを捌けるようになります。「どのJavaでも動く」ではなく「Java 21だからこそ実現できる速さ」を追求することで、現場での開発力が格段にレベルアップします。
9. 開発環境(IDE)でJavaバージョンを正しく認識させるコツ
build.gradle や pom.xml を書き換えても、IntelliJやEclipseなどのツール側が古いJavaを覚えていると、エディタ上に赤い波線が出てしまいます。設定を書き換えた後は、必ず「ツール側のプロジェクト設定」も同期させましょう。
IDE別の再同期ショートカットと確認ポイント
- IntelliJ IDEA:
Ctrl + Shift + O(またはGradle/Mavenパネルのリロードボタン)を押して最新設定を読み込む。 - Eclipse:プロジェクトを右クリック >
Maven/Gradle>Update Projectを実行。 - 共通:プロジェクト設定(Project Structure)で、SDKが指定のバージョン(21や17)になっているか目視で確認。
設定の「その先」を体感しませんか?
バージョンの整合性はあくまでスタートラインです。実際の現場では、ここから「安全なデータベース設計」や「保守性の高いコードの書き方」が求められます。
スタースクールでは、こうした「現場で役立つ実践スキル」を職業訓練講師がリアルタイムでレクチャーするセミナーを開催中。初心者から実務レベルへ、最短距離で駆け上がりたい方をサポートします。
技術の進化は早いですが、土台となる互換性をしっかり押さえておけば怖くありません。まずは今回の対応表を参考に、あなたの開発環境を最新の状態にアップデートしてみてください!
まとめ
「まとめ」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。
本記事では、Spring Bootの各バージョン(3.5、3.4、3.3)がどのJavaバージョン(Java 21、Java 17)に対応しているのかを詳しく解説しました。特にSpring Boot 3.3以降であれば、Java 21という最新のLTSバージョンにも正式対応しており、今後の開発や運用において非常に重要なポイントになります。
Javaのバージョンを誤って選択すると、ビルドエラーやランタイムでの例外が発生する可能性があります。したがって、Spring BootとJavaの対応表を事前に確認し、開発環境に適したバージョンを選ぶことが、開発効率の向上やバグの削減につながります。
さらに、GradleやMavenなどのビルドツールを使って、JavaバージョンやSpring Bootのバージョンを正しく設定する方法も理解できたことで、実際のプロジェクトに応用できる力も身につきました。
また、Java 21とJava 17のどちらを使うべきかという選択も、LTSであることやライブラリ対応の状況などを踏まえた判断が必要です。現場の要件や将来のアップデートも視野に入れて選ぶことが求められます。
例えば、以下のようにGradleでJava 17に設定するコードを使えば、互換性のある環境を簡単に整えることができます。
java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
逆に、Java 21を活用して最新機能を取り入れたい場合は、Spring Bootのバージョンも必ず3.3以降を選びましょう。以下はJava 21を指定した場合のMaven設定の一例です。
<properties>
<java.version>21</java.version>
</properties>
これらの情報を正しく理解しておけば、Spring Bootのアップグレード時やJavaバージョンの移行作業もスムーズに行えます。開発の品質とスピードを両立するためにも、互換性情報を定期的に確認する習慣を持つと良いでしょう。
生徒
「Spring Boot 3.5とか3.4がJava 21とちゃんと対応してるってわかって安心しました!」
先生
「そうですね。プロジェクトによってはJava 17を使い続ける選択もあるので、適材適所で選ぶことが大切ですよ。」
生徒
「Javaバージョンの指定って、GradleやMavenで簡単にできるんですね。今まであんまり意識してませんでした。」
先生
「ビルド設定はプロジェクトの土台ですから、しっかり理解しておくと開発全体が安定します。Spring BootとJavaの対応関係は、これからも重要なチェックポイントになりますよ。」
生徒
「これから新しくSpring Bootのプロジェクトを作るときは、バージョンの組み合わせにもちゃんと気をつけます!」
先生
「すばらしい心がけです。今後もJavaとSpringの関係を意識して、よりよい開発ができるように頑張っていきましょう。」