Spring Boot 2.7から3系へ
この記事は
Spring Bootを2.7から3系へあげた際のメモ書きです。
具体的には以下のライブラリ/ツールをバージョンアップしました。
なお、Sprintg Boot + Kotlin
で記述しているため、Kotlin
で利用するライブラリのアップデートが含まれています。(Exposed
)
ライブラリ | before | after |
---|---|---|
Spring | 5.3.20 | 6.1.2 |
Spring Boot | 2.7.0 | 3.2.1 |
Spring Security | 5.7.1 | 6.2.1 |
flyway | 6.4.0 | 9.0.0 |
exposed | 0.30.1 | 0.46.0 |
Gradle | 7.3 | 7.5 |
springdoc | 1.5 | 2.3.0 |
公式ドキュメント
2.7.xから3.0へのマイグレーションガイドが公式から出ているので、大抵の場合はこれに沿って実践すれば良いと思います。
Spring
URL Matching Changes
Spring MVC and WebFlux URL Matching Changes
@GetMapping("/some/greeting")
fun greeting() {
return "hello"
}
上記のコードは、GET /some/greeting/
では合致しなくなり、404
のレスポンスとなります。
Jakarta EE
Spring validationなど、javax
のパッケージ名をjakarta
に変更します。
- import javax.validation.Valid
+ import jakarta.validation.Valid
Spring Security
マイグレーションガイド
以下を参考にマイグレーションします。
また、Qiitaの記事も大変参考になります。
EnableMethodSecurity
- @EnableGlobalMethodSecurity(prePostEnabled = true)
+ @EnableMethodSecurity(prePostEnabled = true)
requestMatchersを使う
- http.authorizeRequests()
- .mvcMatchers(anyPath).permitAll()
+ http.authorizeHttpRequests()
+ .requestMatchers(anyPath).permitAll()
XSS protection
HTTP headerのX-XSS-Protectionのデフォルト値が変更になっています。
テストコードでヘッダのアサーションをしていたため、修正しました。
その他
リリース日は未定のようですが、すでに7.0の予告もされています。
Kotlin Exposed
パッケージ名がjava-time
から、javatime
に変更されているため、変更が必要です。
Change Log
Flyway
Flyway 8.2
より、MySQLドライバーがFlyway本体に含まれなくなっているので、別途dependenciesに含める必要があります。以下、Release Notesの8.2.0より引用。
Removing MySQL Driver from inclusion in Flyway distribution due to License. MariaDB will be used as fallback driver if no MySQL driver is present on the Classpath.
例えば、MySQLの場合は以下のようになります。
// Flyway
implementation "org.flywaydb:flyway-core:$flywayVersion"
+ implementation "org.flywaydb:flyway-mysql:$flywayVersion"
なお、0.46.0
では、select
メソッドが非推奨になっているため、将来的に修正の必要があります。(関連するissue)
他に、Flyway 7 Breaking Changesも参照。
Gradle
Gradleはwrapperを利用していれば以下のコマンドを実行するだけで十分です。
$ ./gradlew wrapper --gradle-version=7.5
springdoc-openapi
Spring Boot 3系は、springdoc-openapi 2.0.xと利用できるので、springdoc-openapiもバージョンアップします。
+ implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.3.0'
他に参考になった資料
Discussion