SpringBoot 2.3 to 2.4 メモ

springboot 2.4がGAとなりました。
Release Noteを参考に2.3系から2.4系への移行方法をまとめてみます。
自分が移行するときに関係のあるものが中心となりますがご容赦ください🙇‍♂️

関連記事はこちら

SpringBoot Updateまとめ

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.propertiesapplication.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が必要になったようです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です