🌟

Spring Boot のアップグレード手順

2023/06/01に公開

これはなに?

サンプルのリポジトリを使って、Spring Boot を2.2から2.5へアップグレードするための手順をまとめたものである。

方針

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Migration-Guide

We also recommend to upgrade in phases and not in one jump to the latest GA: first upgrade to 2.0, then 2.1, etc.

マイグレーションガイドで勧めれている通り、段階的にアップグレードする。

手順

以下のリポジトリをサンプルとして用いる。

https://github.com/htnk128/kotlin-ddd-sample

基本的には、各バージョンのリリースノートから関係がありそうな箇所を拾って対応していく流れとなる。

Spring Boot 2.3

リリースノート確認

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.3-Release-Notes

対応

Gradle アップグレード

cd kotlin-ddd-sample

./gradlew wrapper --gradle-version=6.3

./gradlew -v

置換

find ./buildSrc/src/main/kotlin -name 'Versions.kt' -exec sed -i '' 's/const val flyway: String =.*/const val flyway: String = "6.4.4"/g' {} \;

find ./buildSrc/src/main/kotlin -name 'Versions.kt' -exec sed -i '' 's/const val jackson: String =.*/const val jackson: String = "2.11.4"/g' {} \;

find ./buildSrc/src/main/kotlin -name 'Versions.kt' -exec sed -i '' 's/const val junit: String =.*/const val junit: String = "5.6.3"/g' {} \;

find ./buildSrc/src/main/kotlin -name 'Versions.kt' -exec sed -i '' 's/const val springBoot: String =.*/const val springBoot: String = "2.3.12.RELEASE"/g' {} \;

以下もついでに実施した。

find ./buildSrc/src/main/kotlin -name 'Versions.kt' -exec sed -i '' 's/const val kotlin: String =.*/const val kotlin: String = "1.3.72"/g' {} \;

find ./buildSrc/src/main/kotlin -name 'Versions.kt' -exec sed -i '' 's/const val mockitoKotlin: String =.*/const val mockitoKotlin: String = "3.2.0"/g' {} \;

find ./buildSrc/src/main/kotlin -name 'Dependencies.kt' -exec sed -i '' "s/com.nhaarman.mockitokotlin2:mockito-kotlin/org.mockito.kotlin:mockito-kotlin/g" {} \;

Gracefulシャットダウンの有効化
application.yml に server.shutdown を追加し graceful を設定する。

server:
  shutdown: graceful

動作確認

PR
https://github.com/htnk128/kotlin-ddd-sample/pull/52

ある程度 (アプリが起動するかなど) 動作確認を行う。

Spring Boot 2.4

リリースノート確認

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.4-Release-Notes

対応

置換

cd kotlin-ddd-sample

find ./buildSrc/src/main/kotlin -name 'Versions.kt' -exec sed -i '' 's/const val flyway: String =.*/const val flyway: String = "7.0.4"/g' {} \;

find ./buildSrc/src/main/kotlin -name 'Versions.kt' -exec sed -i '' 's/const val junit: String =.*/const val junit: String = "5.7.2"/g' {} \;

find ./buildSrc/src/main/kotlin -name 'Versions.kt'  -exec sed -i '' 's/const val mockitoKotlin: String =.*/const val mockitoKotlin: String = "4.0.0"/g' {} \;

find ./buildSrc/src/main/kotlin -name 'Versions.kt' -exec sed -i '' 's/const val springBoot: String =.*/const val springBoot: String = "2.4.13"/g' {} \;

find ./buildSrc/src/main/kotlin -name 'Versions.kt' -exec sed -i '' 's/const val kotlin: String =.*/const val kotlin: String = "1.4.32"/g' {} \;

build.gradle.kts 編集

find ./buildSrc/src/main/kotlin -name 'Versions.kt' -exec sed -i '' 's/const val ktlintCore: String =.*/const val ktlintCore: String = "0.41.0"/g' {} \;

find ./buildSrc/src/main/kotlin -name 'Versions.kt' -exec sed -i '' 's/const val ktlint: String =.*/const val ktlint: String = "10.0.0"/g' {} \;
  • 2行目の import org.jlleitschuh.gradle.ktlint.KtlintFormatTask を削除
  • tasks ブロックの val ktlintKotlinScriptFormat by existing(KtlintFormatTask::class)val ktlintFormat by existing(Task::class) を削除
  • buildSrc/src/main/kotlin/Versions.ktktlint10.0.0 に変更

editorconfig 追加

echo '[*.{kt, kts}]
#---- Ktlint rules ----
# Comma-separated list of rules to disable (Since 0.34.0)
# Note that rules in any ruleset other than the standard ruleset will need to be prefixed
# by the ruleset identifier.
disabled_rules = import-ordering, indent' > .editorconfig

動作確認

PR
https://github.com/htnk128/kotlin-ddd-sample/pull/53

ある程度 (アプリが起動するかなど) 動作確認を行う。

Spring Boot 2.5

リリースノート確認

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.5-Release-Notes

対応

Gradle アップグレード

cd kotlin-ddd-sample

./gradlew wrapper --gradle-version=7.0.2

./gradlew -v

置換

find ./buildSrc/src/main/kotlin -name 'Versions.kt' -exec sed -i '' 's/const val kotlin: String =.*/const val kotlin: String = "1.5.32"/g' {} \;

find ./buildSrc/src/main/kotlin -name 'Versions.kt' -exec sed -i '' 's/const val flyway: String =.*/const val flyway: String = "7.7.3"/g' {} \;

find ./buildSrc/src/main/kotlin -name 'Versions.kt' -exec sed -i '' 's/const val jackson: String =.*/const val jackson: String = "2.12.7"/g' {} \;

find ./buildSrc/src/main/kotlin -name 'Versions.kt' -exec sed -i '' 's/const val springBoot: String =.*/const val springBoot: String = "2.5.14"/g' {} \;

find . -name 'build.gradle.kts' -exec sed -i '' 's/allprojects {/tasks.getByName<Jar>("jar") {\n    enabled = false\n}\n\nallprojects {/g' {} \;

動作確認

PR
https://github.com/htnk128/kotlin-ddd-sample/pull/54

ある程度 (アプリが起動するかなど) 動作確認を行う。

Discussion