Spring Boot 2.5についてメモ
はじめに
今週(2020/5/20)にSpring Boot 2.5が出ましたが、どんなのが出たのかまとめて、なんとなく違いを把握おこうと思います。 基本的にはRelease Notesの内容を個人的に気になったところを少し深ぼって、自分の理解をまとめようと思うので、正確な情報は本家のブログやそれに付随する記事等をご参照ください(なるべく、情報ソースのリンクはつけます)。 ちなみに、ドキュメントに書かれた変更点を自分の理解でまとめたものなので、基本的に機能に対しては動作検証などは行っておりません。
2.4からの変更点
このブログでは以下のような変更点についてまとめます。
- DataSourceの初期化スクリプトに対するサポートの変更
- Actuator
/info
エンドポイントがよりセキュアに - 環境変数のプリフィクス
- HTTP/2 over TCP (h2c)
- R2DBCを用いたデータ初期化
- Docker Imageバインディングサポート
- ActuatorのPrometheusエンドポイントでOpenMetrics形式でのリソース公開
DataSourceの初期化スクリプトに対するサポートの変更
全体を眺めていると1番メインの変更っぽいです。
schema.sql
とdata.sql
に関するサポートがリデザインされています。
まず1つ目としてspring.datasource.*
は非推奨になりspring.sql.init.*
プロパティが新しく用意されました。
SqlInitializationProperties.javaでいろいろと定義されているみたいですね。
主なものをいかにまとめようと思います。spring.sql.init.
のプリフィクスの部分は省略します。
プロパティ名 | 説明 |
---|---|
schemaLocations | スキーマ(DDL)スクリプトのロケーション |
dataLocations | データ(DML)スクリプトのロケーション |
username | 初期化スクリプトを事項するユーザ名。もし別途設定が必要な場合 |
password | 初期化スクリプトを事項するパスワード。もし別途設定が必要な場合 |
continueOnError | エラーが発生してもスクリプト継続するか否か(デフォルトfalse) |
spring.datasource.*
から初期化スクリプトに関わるプロパティが切り出された感じっぽいですね。
また、username
とpassword
に関しては専用のものが用意されたみたいです。
Actuator /info
エンドポイントがよりセキュアに
デフォルトではActuatorの/info
エンドポイントがデフォルトでは公開されないようになりました。
しかし、Spring Securityがクラスパスにある場合は認証が求められるようになります。
2.5からの新しい機能
環境変数のプリフィクス
この機能で、同じ環境で複数のSpring Bootアプリケーションを実行、設定を行なうことができます。
SpringApplication.setEnvironmentPrefix(…)
を利用することで、この機能を利用できます。
例えばmyapp
というプリフィクスを付けてアプリケーションを起動する場合は以下のようにすれば可能になります。
SpringApplication application = new SpringApplication(MyApp.class); application.setEnvironmentPrefix("myapp"); application.run(args);
この設定を行なうことで、すべてのプロパティを環境変数で変更するためにプリフィクスをつける必要があります。
例えば、ポートを変更したい場合はMYAPP_SERVER_PORT
を設定する必要があります。
ちょっと動かしてみましたが、上記の設定が行われている場合SERVER_PORT
ではポートの変更を行なうことはできませんでした。
HTTP/2 over TCP (h2c)
マニュアル設定は無しで、HTTP/2 over TCP (h2c)、TSLではないHTTPでのHTTP/2の利用が可能となりました。
この機能を利用するためにはserver.http2.enabled=true
を設定して、かつserver.ssl.enabled=false
に設定する必要があります。
実際の実行結果は以下のようになります。
$ curl http://localhost:8080/hello -v --http2 * Trying 127.0.0.1:8080... * TCP_NODELAY set * Connected to localhost (127.0.0.1) port 8080 (#0) > GET /hello HTTP/1.1 > Host: localhost:8080 > User-Agent: curl/7.68.0 > Accept: */* > Connection: Upgrade, HTTP2-Settings > Upgrade: h2c > HTTP2-Settings: AAMAAABkAARAAAAAAAIAAAAA > * Mark bundle as not supporting multiuse < HTTP/1.1 101 < Connection: Upgrade < Upgrade: h2c < Date: Sun, 23 May 2021 08:59:28 GMT * Received 101 * Using HTTP2, server supports multi-use * Connection state changed (HTTP/2 confirmed) * Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0 * Connection state changed (MAX_CONCURRENT_STREAMS == 100)! < HTTP/2 200 < content-type: text/plain;charset=UTF-8 < content-length: 10 < date: Sun, 23 May 2021 08:59:28 GMT < * Connection #0 to host localhost left intact Hello, 2.5
R2DBCを用いたデータ初期化
R2DBCを通して、スクリプトベースの初期化が可能になりました。
クラスパスにschema.sql
とdata.sql
というスクリプトファイルがある場合は自動的に実行されるようになります。
また、JDBC同様にspring.sql.init.*
プロパティを通して設定が可能です。
Docker Imageバインディングサポート
Custom Buildpacksのサポート
Custom BuildpacksがMavenでもGradleでもサポートされるようになりました。
buildpacks
プロパティにディレクトリ、tar.gz
、ビルダー、Dockerイメージを指定することができます。
バインディング
Mavanでも、GradleでもVolumeバインディングがサポートされました。
この機能のおかげでBuildpacksnがローカルのパスやDocker Volumeをバインドすることができます。
ActuatorのPrometheusエンドポイントでOpenMetrics形式でのリソース公開
Actuatorの/actuator/prometheus
エンドポイントで通常のPrometheusの形式とOpenMetricsの形式でレスポンスを返すことが可能になってます。
application/openmetrics-text;version=1.0.0
のようなヘッダーをつけることで、OpenMetricsのレスポンスを受け取ることが可能です。
Dependency Upgrades
ここに書かれるように複数の依存がアップグレードされています。