Spring Boot 2.7 サポート終了について

# 概要

Spring Boot2.7のサポートが今年11月に終了するとのことで最近話をよく耳にするようになりました。
私はSpring Bootは3.xから入ったため、メジャーバージョン変更に伴ってどんな違いがあるのかや移行の大変さなどが気になり調べてみました。

内容としては基本的には、公式からでているMigrationGuideや各リリースノート等を参考に机上ベースとしてまとめた形です。
参考にしたサイト等は記事最後にまとめています。
# Spring Boot2.7から3.0にかけての変更
まず変更された点について見てみた限りでは以下が該当しそうでした。
- SpringFrameworkの対応ver
    - JDKの対応ver
    - Java EEからJakarta EEへ変更
- SpringBoot 2.xで非推奨APIの削除
- Dependency Version
- その他変更点
## Spring Frameworkの対応ver

まずSpring Bootのverによって、Spring Frameworkの利用可能なverが異なります。
Spring Boot2.7ではSpring Framework 5.3ベースでしたが、Spring Boot3.0からはSpring Frameworkの6.0が必要になりました。
Spring Framework5.3と6.0とでは利用可能なJDKのバージョンなどが異なるため変更としてはかなり大きい点と思われます。

SpringFramework5.3と6.0での対応は以下のようです。(LTSのJDK8と11がついに。。。)

|                       | Spring Framework 5.3 | Spring Framework 6.0 | 備考                |
| --------------------- | -------------------- | -------------------- | ----------------- |
| JDK                   | 8-21                 | 17-21                |                   |
| Java EE or Jakarta EE | Java EE 7-8          | Jakarta EE 9-10      | javaxからJakartaへ変更 |



Spring Framework自体のAPIなどの変更点はアップグレードガイドが用意されていたため、そちらを参考にするのが良さそうです。
パット見た限りでは、非推奨のものなどが出てきたりしているため、そのあたりは考慮する必要があるかもしれないです。
https://github.com/spring-projects/spring-framework/wiki/Upgrading-to-Spring-Framework-6.x#upgrading-to-version-60

### JDKの対応ver
前述の通りSpring Frameworkの対応verにより利用できるJDKも変わる形となりました。
JDKのバージョンごとでの変更内容自体は以下OpenJDKのサイトにまとめてありました。
https://openjdk.org/jeps/0
非推奨となった機能や削除された機能などがないかなどはチェックする必要がある感じですかね。

### Java EEからJakarta EEへ変更
Java EEからJakarta EEに変更が行われるとのことで、従来javaxパッケージを使用していたところがjakartaパッケージを使用するようになったもようです。

これにより例えば以下のようにjavaxで記載していたところをjakartaにしておく必要があるもようです。

```java
// Java EE
import javax.xml.bind.annotation.A;
// Jakarta EE
import jakarta.xml.bind.annotation.A;
```


## Spring Boot 2.xで非推奨APIの削除

Spring Boot 3.0にあたり2.xで非推奨だったメソッドやクラス等が削除されたようです。
そのため、例えば2.7にて非推奨になった `DatabaseDriver.GAE` などが削除されたのかと思われます。

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.7-Release-Notes#deprecations-in-spring-boot-27

見ていく方法ですが、Spring Boot 2.xでの非推奨は各リリースノートを見ていくしかないように見えました。(どこかにまとまっていたら嬉しい)

## Dependency Version

かなり多くのDependency(依存関係)が変更されたようです。
多くのケースではpom.xml上に明示的にバージョン指定されているかと思いますため、
互換性のあるバージョンに置き換えてあげる必要がありそうです。

対応バージョンは公式にてまとめられていたためそちらを参照可能です。
https://docs.spring.io/spring-boot/docs/2.7.x/reference/html/dependency-versions.html
https://docs.spring.io/spring-boot/docs/3.0.x/reference/html/dependency-versions.html

## その他変更点

他にもいくつか変更点がありますが、基本的にはMigration Guide上に綺麗にまとめられていたためここでの細かい記載は割愛をします。
一応どんなものがあるかですと、**ログ日付のフォーマット変更**や**URLマッチングの仕様変更**などがありました。
今あげた上記2つを初め影響が大きいものも多数ありますため、注意が必要そうです。
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Migration-Guide#core-changes


# Spring Boot Migratorについて

Spring Boot 2.7からSpring Boot 3.0への移行ツールとしてSpring Boot Migratorなるものが用意されておりました。
https://github.com/spring-projects-experimental/spring-boot-migrator
現在はMavenのみサポートしているようなので、Gradleを利用されている場合は注意が必要そうです。
また、全パターンを網羅しきれている状態ではなく、現在も質問やFBをぜひ!!といった形のようです。

# 有償サポートについて

最後に有償サポートについて記載します。
Spring Bootのサポートの期間をあらためて見ると、有償サポートであれば+1年半ほど期間があるようでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406495/8c0e087f-a81c-ce51-bfed-4e753c7a108a.png)
有償サポートってなんだろうと見たところVMware社よりVMware Spring Runtimeというものとして販売がされておりました。
https://tanzu.vmware.com/jp/spring-runtime

金額感は特に調べても出てこなかったため、基本は問い合わせをする必要がありそうです。
一方でどうやらこちら元々はPivotal社より提供されていたもののようで、そちらの場合は少しだけ情報が出ていました。


> Pivotal Spring Runtimeの価格は、利用するサーバ8コアあたり年間4000ドル、もしくはKubernetesの50Podsあたり年間2万5000ドル。Pivotal日本法人からも販売されるとのことです。

引用元：https://www.publickey1.jp/blog/19/pivotalopenjdkspring_frameworkpivotal_spring_runtime.html

もちろんこちらは過去の話のため、参考程度かなと思われます。
# まとめ

今回はSpring Boot 2.7のサポート終了関連について調べてみました。
やはりメジャーバージョンアップということもあり、変更点等は大きそうですね。

最後に、今回まとめた内容は基本机上ベースの内容のみとなっています。
そのため、もし実態と異なる点などがありましたら、ぜひコメント等でご指摘ください。
# 参考

**Migration Guide**
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Migration-Guide
https://github.com/spring-projects/spring-framework/wiki/Upgrading-to-Spring-Framework-6.x

**リリースノート**
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.7-Release-Notes
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Release-Notes
https://github.com/spring-projects/spring-framework/wiki/What%27s-New-in-Spring-Framework-6.x

**Dependency Versions**
https://docs.spring.io/spring-boot/docs/2.7.x/reference/html/dependency-versions.html
https://docs.spring.io/spring-boot/docs/3.0.x/reference/html/dependency-versions.html

**JEP**
https://openjdk.org/jeps/0

**Migration Tool**
https://github.com/spring-projects-experimental/spring-boot-migrator