springboot 2.4がGAとなりました。
Release Noteを参考に2.3系から2.4系への移行方法をまとめてみます。
自分が移行するときに関係のあるものが中心となりますがご容赦ください🙇♂️
関連記事はこちら
SpringBoot Updateまとめ目次
- Versioning scheme change
- JUnit 5’s Vintage Engine Removed from spring-boot-starter-test
- Config File Processing (application properties and YAML files)
- Embedded database detection
- Logback Configuration Properties & Web Configuration Properties
- Spring Boot Gradle Plugin
- Metrics export in integration tests
Versioning scheme change
// 2.3以前
id 'org.springframework.boot' version '2.3.5.RELEASE'
// 2.4以降
id 'org.springframework.boot' version '2.4.0'
これまでは2.3.5.RELEASE
のようなバージョン指定でしたが、2.4系からは2.4.0
のようにRELEASE
が要らなくなるようです。
JUnit 5’s Vintage Engine Removed from spring-boot-starter-test
JUnit4でテストを実装している場合のみ影響します。
testImplementation('org.springframework.boot:spring-boot-starter-test')
// 以下を明示的に追加
testImplementation("org.junit.vintage:junit-vintage-engine") {
exclude group: "org.hamcrest", module: "hamcrest-core"
}
junit-vintage-engine
の依存がspring-boot-starter-test
から削除されるようです。junit-vintage-engine
はJunit5の動作環境でJunit4の記述ができるようにするライブラリのため、
Junit4でテストを実装している場合は
- junit-vintage-engineを依存に加える
- Junit5に移行する
のどちらかが必要なようです。
Config File Processing (application properties and YAML files)
application.properties
やapplication.yml
で以下のような使い方をしている場合は、
想定通りに設定が読み込まれているか確認が必要らしい
- profile指定
----
区切りのマルチYaml
詳細なドキュメントはこちら
これまでと同様の動作をさせたい場合
すぐに移行ができない場合は、以下のプロパティを設定すればこれまでのロジックで動作するようです。
spring.config.use-legacy-processing=true
spring:
config:
use-legacy-processing: true
jar外のConfigurationファイルを使用している場合
これまでは、jar内のConfigurationファイルの設定が優先されていましたが、
2.4からは常にjar外のConfigurationファイルの設定で上書きされるようです。
そのため、想定通りに設定が反映されているか確認が必要そうです。
設定の確認は一時的にenvエンドポイントを有効にすると確認しやすいかなと思います
management:
endpoints:
web:
exposure:
# 特に指定をしていない場合はデフォルトで有効
include: "env"
profile指定をしている場合
spring.profiles.active
を単体で利用している分には変更がいらなそう🤔
Embedded database detection
データベースがインメモリ上にある場合のみ組み込みDBと見なされるようになったようです。
以下のような場合に影響があるようです。
- H2、HSQL、Derby
- ファイルベースで永続化、サーバーモードでの起動
影響としては以下のプロパティを明示的に指定する必要があるようです。
spring.datasource.username
spring.datasource.initialization-mode
Logback Configuration Properties & Web Configuration Properties
Logback, MVC, WebFlux周りのプロパティーに変更があるそうです。
変更内容はこちらが一覧化されていてみやすいかったです。
ただ、プロパティの変更点をすべて把握するのは厳しいのでspring-boot-properties-migrator
を使用するのが現実的な気がします。
SpringBoot Updateまとめに手順を載せていますのでご確認ください!
Spring Boot Gradle Plugin
bootJar {
// 変更前
// mainClassName 'com.example.ExampleApplication'
// 変更後
mainClass 'com.example.ExampleApplication'
}
mainクラスの指定方法が変わるようです
Metrics export in integration tests
@SpringBootTest
// 明示的に追加が必要
@AutoConfigureMetrics
class SampleTest{}
@SpringBootTest
でメトリクスのテストをしていた場合は、@AutoConfigureMetrics
が必要になったようです。