将 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つ
プロパティサンプル説明server.shutdowngracefulgracefulを指定するとシャットダウン時に以下の動作をする
– 新規リクエストを受け付けない
– 受け付け中のリクエストの処理が終わるまで待機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的堆内存。

bannerAds