将 Spring Boot 2.2 升级至 2.3 的备注
简述/简要概括
-
- SpringBoot2.3がGAとなった
Release Noteを参考に2.2系から2.3系へのアップグレードで関わりのあるものをまとめてみた
最低要求的变动
Gradle的相应版本有以下两种方案。
-
- 5.6.x
- 6.3 or later
用以下命令升级 Gradle:
./gradlew wrapper --gradle-version 6.5
如果在不支持的版本上执行build,会出现以下错误。
Spring Boot插件需要Gradle 5(仅限5.6.x)或Gradle 6(6.3或更高版本)。当前版本为Gradle 6.0。
使用云原生构建包构建OCI镜像
现在可以创建 Docker 镜像
如果不需要特定的定制,您可以使用以下命令进行创建!
./gradlew bootBuildImage
如果需要自定义,请参考以下内容。
网站启动器不再包括验证启动器。
javax.validation.*がデフォルトでは使えなくなるとのこと。
→利用する場合は依存に追加が必要
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
dependencies {
...
implementation 'org.springframework.boot:spring-boot-starter-validation'
}
配置属性
-
- property名がいくつか変わっているとのこと
spring-boot-properties-migratorを入れておくと起動時に非推奨なプロパティを見つけてくれて、かつ一時的に読み替えも行ってくれるらしい
ただし、「プロパティの移行が完了したら依存から削除してね」とのこと
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-properties-migrator</artifactId>
<scope>runtime</scope>
</dependency>
runtime("org.springframework.boot:spring-boot-properties-migrator")
优雅关闭
-
- デフォルトで対応するようになったらしい…!
- 設定するプロパティは以下の2つ
– 新規リクエストを受け付けない
– 受け付け中のリクエストの処理が終わるまで待機spring.lifecycle.timeout-per-shutdown-phase20s最大待機時間
本家文件在这里。
存活和可用性探针
management.health.probes.enabled=trueを設定することで以下の2エンドポイントが有効になる
/actuator/health/liveness:アプリケーションが正常稼働しているかどうか
/actuator/health/readiness:リクエスト受付可能な状態かどうか
kubernetesで稼働している場合にはデフォルトで有効
Kubernetes中liveness和readiness的行为如下:
-
- liveness: 一定時間DOWNが続いた場合、podが再起動される
- readiness: UPの状態になるとingressからリクエストが割り振られるようになる
参考其他资源。
-
- Spring Blog
- Baeldung
获取状态
从ApplicationAvailability获取。
@RequiredArgsConstructor
public class Sample {
private final ApplicationAvailability applicationAvailability;
// livenessの状態を取得(CORRECT/BROKEN)
public LivenessState getLivenessState() {
return applicationAvailability.getLivenessState();
}
// readinessの状態を取得(ACCEPTING_TRAFFIC/REFUSING_TRAFFIC)
public ReadinessState getReadinessState() {
return applicationAvailability.getReadinessState();
}
}
改变状态
通过AvailabilityChangeEvent进行更改。
@RequiredArgsConstructor
public class Sample {
private final ApplicationEventPublisher eventPublisher;
// livenessの状態を変更(CORRECT/BROKEN)
public void changeLivenessState() {
// UPに
AvailabilityChangeEvent.publish(eventPublisher, "event source.", LivenessState.CORRECT);
// DOWNに
AvailabilityChangeEvent.publish(eventPublisher, "event source.", LivenessState.BROKEN);
}
// readinessの状態を変更(ACCEPTING_TRAFFIC/REFUSING_TRAFFIC)
public void getReadinessState() {
// UPに
AvailabilityChangeEvent.publish(eventPublisher, "event source.", ReadinessState.ACCEPTING_TRAFFIC);
// DOWNに
AvailabilityChangeEvent.publish(eventPublisher, "event source.", ReadinessState.REFUSING_TRAFFIC);
}
}
“event source.”には任意のオブジェクトを設定する
SpringBoot 2.2的笔记
由于未整理2.1至2.2的内容,所以根据面临的问题情景把它们放在这里。?♂️
Tomcat的MBean注册表
似乎默认情况下已禁用Tomcat的线程数量等指标输出。为使其生效,需要进行以下属性设置。
server:
tomcat:
mbeanregistry:
enabled: true
为什么默认会被禁用呢?因为据说这可以节约约2MB的堆内存。