Spring Bootチームは2023年11月にSpring Boot 3.2をリリースした。この最新リリースは機能が満載で、もっとも注目すべきは仮想スレッドとCoordinated Restore at Checkpoint (CRaC)のサポートだ。その他の機能としては、SSLバンドルのリロード、RestClient
とjdbcClient
インターフェースのサポート、オブザーバビリティの改善などがある。
JDK 21で特に重要な機能はProject Loomの仮想スレッドで、JEPは高スループットの並行アプリケーションの記述、維持、観測の労力を劇的に減らす軽量スレッドと説明している。
Spring Boot 3.2には仮想スレッド機能のサポートが統合されている。これを使うには、プロパティspring.threads.virtual.enabled
をtrue
に設定し、JDK21を使う。つまり、ウェブリクエストを処理するアプリケーションコードは仮想スレッドで動作するようになる。
さらに、プロパティで仮想スレッドを有効にすると、SimpleAsyncTaskExecutor
クラスは 仮想スレッドを使うように設定され、@EnableAsync
でアノテーションされたメソッド、非同期SpringのMVCリクエスト、Spring WebFluxのブロック実行呼び出しの動作に直接影響する。
この機能によって影響を受ける他の領域は、RabbitMQとKafkaリスナー、Spring Data Redis、Spring for Apache Pulsarである。
RestClientはRestTemplate
に代わる最新の同期HTTPクライアントで、Spring Framework 6.1で導入された。Spring BootはRestClient
インスタンスを作成するためにビーンRestClient.Builder
を作成し、事前に構成する。これはSpring WebFluxの対応するWebClient
のような機能的なスタイルのAPIを提供する。RestClient
使う主な利点の1つは、リモートのREST APIを呼び出すためにSpring WebFluxの依存関係を追加する必要がない。
Springチームは、Spring WebFluxやProject Reactorが使われていない限り、リモートRESTサービスを呼び出すにはRestClientを使うことを推奨している。この場合、WebClientが推奨される。
RestClientと同様に、新しいインターフェイス jdbcClientはSpring Framework 6.1で導入され、Spring Boot 3.2では自動設定される。これは、一般的なデータベースを操作をするための流暢なAPIを提供する。
SSLバンドルはSpring Boot 3.1で初めて導入され、キーストア、証明書、秘密鍵などのSSL情報を構成して消費する。Spring Boot 3.2では、プロパティreload-on-update=true
を設定することで、SSLトラストマテリアルが変更されたときにSSLバンドルをリロードできる。ホットリロードはNettyとTomcatウェブサーバーでサポートされている。関連するプロパティspring.ssl.bundle.watch.file.quiet-period=10s
を設定することで、変更が検出されるまでの期間を設定できる。
いくつかのオブザーバビリティの改善がSpring Boot 3.2に採用された。@Timed
,@Counted
,@NewSpan
,@ContinueSpan
,@Observed
といった Micrometerのアノテーションは、spring-boot-starter-aop
がクラスパスにあるときに宣言的に使用できる。@Scheduled
でアノテートされたメソッドは、オブザーバビリティのためにインスツルメンテーションされる。プロパティmanagement.observations.enable
をfalse
に設定することで、指定した名前で始まるオブザベーションを無効にできる。プロパティmanagement.observations.enabl
eはSpring Boot 3.2では非推奨となり、management.observations.key-values
に置き換えられる。このプロパティですべてのオブザベーションに適用できる共通のキー値を追加する。このリリースで改善されたオブザーバビリティの全リストを読む。
BroadcomのSpring Developer AdvocateであるJosh Long氏は、InfoQに次のように語った。
SpringとJavaの開発者にとって、これほど良いタイミングはない。Spring Boot 3.2は、Project CRaCのサポート(OpenJDKの特定のディストリビューションで利用可能)とProject Loom(Java21で利用可能)により、実行時の大きな効率化を実現する。これらの機能は、GraalVMネイティブイメージをサポートする既存の作業と組み合わされ、本番環境で最高の体験を求めるSpring Boot開発者に素晴らしい機会を提供する。
アップグレードと注目すべき変更点の完全なリストは公式リリースノートを参照のこと。