Maru@maru

Dev Hub

Translated from Korean

Spring Boot 3.4アップデート:構造化ログとテストの改善点を解説

デプロイ環境がコンテナやKubernetes中心になるにつれ、ログをJSON形式で標準化することがバックエンド開発の基本タスクとなりました。これまでのSpring Bootアプリケーションでこれらを実現するには、Logback XMLファイルを直接作成するか、サードパーティのライブラリに依存する必要がありました。

Spring Boot 3.4では、このプロセスが大幅に簡素化されました。複雑なテンプレートファイルなしで設定プロパティを一行追加するだけで構造化ログを生成できるようになり、Java 21の仮想スレッドサポートの拡張、さらにテストフレームワークの利便性も向上しています。

一行の設定で完了する構造化JSONロギング

Spring Boot 3.4では、構造化ロギング(Structured Logging)の自動設定が公式に組み込まれました。Elastic Common Schema、Logstash、GELF形式をデフォルトでサポートしているため、XMLファイルを個別に作成することなく、標準のJSONログをターミナルやファイルに直接出力可能です。

application.propertiesの設定例(Spring Boot 3.4基準):

properties

既存インフラのログ収集パイプラインの規格に合わせて値を指定するだけで、日付、スレッド、ログレベル、MDCフィールドが解析しやすい形式で出力されます。ロギング設定の保守にかかる負担を軽減できます。

テストコードの変化:@MockitoBeanとMockMvcTester

テスト層でも重要な改善が行われました。これまで慣例として使用されていた@MockBeanや@SpyBeanのアノテーションが非推奨(deprecated)となりました。代わりにSpring Framework 6.2から提供される@MockitoBeanや@MockitoSpyBeanを使用することが推奨されます。

コントローラー層を検証する際に使用するMockMvcTesterも新しく導入されました。以前のMockMvcのチェーン構文はやや冗長でしたが、AssertJベースの柔軟なアサーションスタイルで、レスポンスステータスやJSONパスを検証できるようになりました。

テストコード例(Spring Boot 3.4基準):

java

SpringコンテキストとMockitoの統合方式が明確になり、テストコードの可読性が一段と向上します。

仮想スレッドサポートの拡大とBean注入の利便性

Java 21の仮想スレッドを有効にするspring.threads.virtual.enabled=trueオプションの適用範囲も広がりました。Tomcatだけでなく、Undertow Webサーバー環境やOtlpMeterRegistryのメトリクス送信スレッドまで、仮想スレッドが自動的に適用されます。I/O集約的なサービスにおいて、追加のスレッドプールチューニングなしで同時リクエスト処理能力を安定して高めることが可能です。

同じインターフェースタイプのBeanが複数登録されている場合に優先順位を柔軟に調整する@Fallback機能も追加されました。他の有効なBean候補が存在する場合は注入されず、明示的なBeanがない場合にのみデフォルトの実装として注入されるというパターンを簡潔に構成できます。

実務への適用ガイド

Spring Boot 3.4は、開発の生産性と運用時の利便性を両立させたバージョンです。コンテナ環境で複雑なロギング設定を排除したいチームや、AssertJスタイルでWeb層のテストを綺麗に整理したいチームには特におすすめです。

プロジェクトを移行する際は、テストコード全体に宣言されている@MockBeanを@MockitoBeanへ検索・置換(Find & Replace)する作業さえ行えば、比較的スムーズにアップグレードを完了できます。

Loading comments…