Spring Boot 3 で何が変わったか? NRI OSSソリューションマガジン 2024.1.24発行 Vol.205
1.Spring Boot 3 で何が変わったか?
いつもOpenStandiaのメールマガジンをご購読いただき、誠にありがとうございます。
昨年、2023年の11月24日、Javaコミュニティを牽引するOSSフレームワークの一つである Spring Bootのバージョン2.7が、コミュニティのサポート期間の終了を迎えました。
このバージョンは「Spring Boot 2系」の最終リリースバージョンであるため、「Spring Boot 3系」へのマイグレーションについて関心が高まっています。
そこで今回は、Spring Bootの2系から3系で何が変わったか、また3系からどのような機能が新しく追加されたのかについて、それぞれ主要なものをピックアップして紹介します。
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
●Spring Bootとは?
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Spring Bootとは、Spring Frameworkをベースとしたアプリケーションを、必要最小限の設定を行うだけで簡単に開発できるようになるフレームワークです。
○アプリケーションを簡単に開発できる仕組み
Spring Bootは、標準的な設定や依存ライブラリを定義した「スターター」と呼ばれるライブラリの形で提供されており、この仕組みによって、アプリケーションのビルドや構成に関する設定の大部分を省略することができます。
○Webアプリケーションサーバの準備は不要
TomcatやJetty、Undertowといった Webアプリケーションサーバは、通常アプリケーションの実行環境上にインストールされセットアップを終えておく必要があります。
しかしSpring Bootでは、それらのWebアプリケーションサーバの組み込み版(Jar形式で配布されているもの)をサポートしており、アプリ内部にサーバを組み込むことができます。
このSpring Bootの仕組みによって、ビルドされたアプリケーションのJarは単独でWebアプリとして起動できる「実行可能Jar」となります。
Java環境上で動作する全てのリソースが単一のJarに含まれるという非常にシンプルな構成は、コンテナ環境で運用するアプリの開発と相性が良い点が特徴です。
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
●Spring Boot 3の主要なトピック
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
まずは、Spring Boot 3で登場した新しい機能、特徴について取り上げます。
○GraalVMネイティブイメージのサポート
少ないメモリで高速に動作するJavaの実行環境「GraalVM」向けのアプリをビルドする機能が取り込まれ、正式にサポートされました。
○MicrometerとMicrometer Tracingによる可観測性(Observability)の向上
MicrometerとMicrometer Tracingによる可観測性を強力にサポートし様々な機能の観測情報を、デフォルト構成と設定で取得できるようになりました。
○HTTP通信を抽象化する「HTTPインターフェース」の追加
従来のRestTemplateやWebClientといったHTTP通信を行う具体的な機能を、業務処理と簡単に分離できるインターフェースの仕組みが提供されました。
○HTTP APIの詳細なエラー応答を実現する新しいRFCのサポート
HTTP APIのエラーレスポンスに、エラー内容の詳細な情報を持たせるための新しい仕様「RFC7807:Problem Details for HTTP APIs」をフレームワークとしてサポートしました。
○Testcontainersによるコンテナテストの連携強化(v3.1~)
コンテナに関係するテストをJUnit環境で実行できるOSSプロダクト「Testcontainers」との連携を強化し、よりCI/CDサイクルを効率化できるようになりました。
○Javaの仮想スレッドのサポート(v3.2~)
Java21で正式機能として採用された、仮想スレッド(JEP444)の仕組みをフレームワークとして正式にサポートしました。
○新しいサーバとの通信のサポート
いくつかのサーバとの通信を、フレームワークとして正式にサポートしました。
・Apache Pulsar
・KafkaおよびRabbitMQとのSSL通信
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
●Spring Boot 2.7からの主要な変更点
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
次に、Spring Boot 2.7からの主要な変更点を紹介します。
○前提となるJavaのベースバージョンが 17 にアップ
開発・実行のために、バージョン17以上のJava環境が必要になります。
○JakartaEEのベースバージョンが 8 から 9 にアップ
前提となるJavaエンタープライズプラットフォーム(旧JavaEE)の仕様が、JavaEE8と互換性のあったJakartaEE8からJakartaEE9にバージョンアップしました。
これに伴い、JavaEEに仕様が含まれていたサーブレットなどの機能で、クラスパッケージなどのAPIがJakartaに置き換わるなどの変更が入っています。
○周辺プロジェクトのメジャーバージョンアップ
・Spring Security のサポートバージョンが 6 に上がりました。
・Spring Batch のサポートバージョンが 5 に上がりました。
○URLマッチングルールの改定
「/」で終わるURL宛てのリクエストを、自動的に「/」無しのURLへ変換する機能がデフォルト無効になるなど、変更が入っています。
○いくつかのレガシーなクラス・APIの廃止
詳細は公式ページのリリースノートを参照してください。
▼Spring Boot 3.x Release Notes(外部サイト)
- https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Release-Notes
- https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.1-Release-Notes
- https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.2-Release-Notes
Spring Boot 2系から3系へマイグレーションする際には、前提となるJavaとJakartaEEのバージョンなどが、どちらもメジャーバージョンアップします。
そのため、コミュニティからも詳細な内容のマイグレーションガイドが公開されています。
その中では、OpenRewriteといった有用なOSSのマイグレーションツールも紹介されています。
▼Spring Boot 3.0 Migration Guide(外部サイト)
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Migration-Guide
また、OpenStandiaでは、Spring Bootのマイグレーションのご支援だけでなく、コミュニティサポートが終了したバージョンのSpring Bootに対しても技術サポートをご提供しています。
Spring Bootの採用をご検討中の方も、既にご利用しているシステムのマイグレーションをご検討の方も、お気軽に OpenStandiaサポートにご相談ください。
今後ともOpenStandiaをよろしくお願いいたします。
OpenStandiaではOSSの技術サポートを提供しています。
現在のサポート対象OSSは下記OpenStandiaサイトから確認できます。
◆OpenStandiaサポート対象OSS一覧
https://openstandia.jp/services/#supportlist
2.OSS紹介ページ 今月のアップデート(更新:10件)
(更新)
Angular (https://openstandia.jp/oss_info/angularjs/)
Flask (https://openstandia.jp/oss_info/flask/)
Jersey (https://openstandia.jp/oss_info/jersey/)
Keras (https://openstandia.jp/oss_info/keras/)
Kotlin (https://openstandia.jp/oss_info/kotlin/)
Liferay (https://openstandia.jp/oss_info/liferay/)
MyBatis (https://openstandia.jp/oss_info/mybatis/)
Nginx (https://openstandia.jp/oss_info/nginx/)
Ruby (https://openstandia.jp/oss_info/ruby/)
TensorFlow (https://openstandia.jp/oss_info/tensorflow/)
3.OSS紹介ページ 今月のアクセスランキングTOP10
オープンソース情報ページ「OpenStandia OSS紹介」のアクセスTOP10をご紹介
↑ 1位 (2位) Keycloak (https://openstandia.jp/oss_info/keycloak/)
↓ 2位 (1位) Apache Tomcat (https://openstandia.jp/oss_info/tomcat/)
↑ 3位 (5位) PostgreSQL (https://openstandia.jp/oss_info/postgresql/)
↑ 4位 (6位) MySQL (https://openstandia.jp/oss_info/mysql/)
↓ 5位 (4位) PHP (https://openstandia.jp/oss_info/php/)
↓ 6位 (3位) Apache HTTP Server (https://openstandia.jp/oss_info/apache/)
→ 7位 (7位) OpenShift (https://openstandia.jp/oss_info/openshift/)
↑ 8位 (ランク外) Red Hat Enterprise Linux (https://openstandia.jp/oss_info/redhatenterpriselinux/)
↑ 9位 (ランク外) MinIO (https://openstandia.jp/oss_info/minio/)
↑ 10位 (ランク外) Ruby on Rails (https://openstandia.jp/oss_info/rubyonrails/)
※( )内は前月の順位
◆OSS総合情報ページ「OpenStandia OSS紹介」はこちら
https://openstandia.jp/oss_info/
4.今月注目のバグ&セキュリティ情報
【.NET】 X509 証明書 - Azure における検証バイパス
.NET は、さまざまな種類のアプリケーションを構築するために Microsoft によって作成されたオープンソースの開発者プラットフォームです。
Microsoft .NET Framework ベースのアプリケーションが X.509 チェーン構築 API を使用しているにもかかわらず、ロジックの欠陥により X.509 証明書が完全に検証されない場合、セキュリティ機能バイパスの脆弱性が存在します。
攻撃者は、不正な署名を持つ任意の信頼できない証明書を提示し、フレームワークのバグを誘発する可能性があります。
フレームワークは、X.509 チェーンの構築に失敗したことを正しく報告しますが、失敗の理由コードは正しく返されません。
この理由コードを利用して独自のチェーン構築の信頼判断を行うアプリケーションは、このシナリオを誤ってチェーン構築が成功したものとして扱う可能性があります。
これにより、攻撃者がアプリの一般的な認証ロジックを破壊する可能性があります。
詳細は下記関連情報の GitHub の Security Advisories のページをご参照ください。
本脆弱性の影響を受ける .NET のバージョンは下記となります。
・Red Hat Enterprise Linux 8 / CentOS 8
.NET6.0-0:6.0.126-1.el8_9
.NET7.0-0:7.0.115-1.el8_9
.NET8.0-0:8.0.101-1.el8_9
・Red Hat Enterprise Linux 9
.NET6.0-0:6.0.126-1.el9_3
.NET7.0-0:7.0.115-1.el9_3
.NET8.0-0:8.0.101-1.el9_3
関連情報
・Microsoft Security Response Center
https://msrc.microsoft.com/update-guide/vulnerability/CVE-2024-0057
OpenStandia年間サポートサービスでは毎週、セキュリティアラートに関する情報、及びバグFIXに関する情報を提供しています。
◆OpenStandiaオープンソース年間サポートサービスのご紹介
https://openstandia.jp/services/