SpringBoot 3.3がGAとなりました。
Release Notesを参考に3.2系からの変更点をまとめます
自分が移行するときに関係のあるものや興味があるものが中心となりますがご容赦ください🙇♂️
関連記事はこちら
SpringBoot UpdateまとめPrometheus Client 1.x(変更)
メトリクス収集のためにPrometheusを使用している場合、ライブラリ内のPrometheus Clientが0系から1系に上がるようです。
このバージョンアップには破壊的変更が含まれており、特にPushGatewayを利用している場合はPushGateway側が1系に対応していないため以下のようにsimpleclientのついたライブラリに変更する必要があります。
dependencies {
// runtimeOnly 'io.micrometer:micrometer-registry-prometheus'
runtimeOnly 'io.micrometer:micrometer-registry-prometheus-simpleclient'
}
また、PushGatewayを利用していない場合でもメトリクス名が変わったりなんてこともあるようなので、
既存のアプリケーションのメトリクスを出力しておいて、バージョンアップ後のメトリクスと比べておいた方が良さそうです。
CDS Support(新機能)
CDSとは
Class Data Sharingの略で、クラスのデータを再利用することでアプリケーションの起動時間を短縮できる機能です
CDSフレンドリーな構成を自動で生成してくれるようになったようです。
※CDSの知見が浅く、どんな構成だとフレンドリーなのかわかっていない。。。
ひとまず以下のスクリプトを実行したところCDSを利用してクラスデータを再利用してくれてそうなことは確認できました!
# jar生成
./gradlew bootJar
// ディレクトリ移動
cd build/libs
// app.jarの部分は、作られたjarファイル名に置き換えてください
java -Djarmode=tools -jar app.jar extract
// エラーが出る場合は、事前に「java -Xshare:dump」を実行する
java -XX:ArchiveClassesAtExit=application.jsa -Dspring.context.exit=onRefresh -jar app/app.jar
java -XX:SharedArchiveFile=application.jsa -Xlog:class+load:file=cds.log -jar app/app.jar
// cds.logに、CDSの利用状況が出力される
// → 「shared objects file」の行がCDSからロードされたクラス
Base64 Resources(新機能)
base64:
というprefixを付与するとファイルをBase64文字列でプロパティに設定できるようになりました。
証明書の類を環境変数等で渡すことができるということですね…!
以下の簡易的な実装で動作を確認できました。
base64:
resources:
# echo -n sample | base64
sample: "base64:c2FtcGxl"
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.io.ApplicationResourceLoader;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.nio.charset.StandardCharsets;
@RestController
public class Base64ResourcesSample {
@Value("${base64.resources.sample}")
private String base64ResourcesSample;
@GetMapping("/base64-resources-sample")
public String getBase64ResourcesSample() throws Exception {
var resource = new ApplicationResourceLoader().getResource(this.base64ResourcesSample);
return resource.getContentAsString(StandardCharsets.UTF_8);
}
}
$ curl localhost:8080/base64-resources-sample
sample
その他
server.tomcat.threads.max-queue-capacity
というプロパティが追加になったようです。
名前からの推測ですが、Tomcatのスレッドがいっぱいの時にどれくらいのリクエストを待ち行列に加えるか設定できるようになったのではないでしょうか 🤔
server.reactive.session.max-sessions
というプロパティも追加となったようです。
WebFlux使用時に最大セッション数(同時に処理できるリクエスト数の上限?)が制御できるようです。