Spring Boot 2の新機能

Spring Boot 2の新機能

1. 概要

Spring Bootは、Springのエコシステムに意欲的なアプローチをもたらします。 2014年半ばに初めてリリースされました。 Spring Bootは多くの開発と改善を重ねてきました。 そのバージョン2.0は、2018年の初めにリリースする準備ができています。

この人気のあるライブラリが私たちを助けようとするさまざまな分野があります:

  • 依存関係管理 スターターおよびさまざまなパッケージマネージャーの統合を通じて

  • 自動構成。 Springアプリが準備を整えるのに必要な設定の量を最小限に抑え、設定よりも規約を優先する

  • すぐに使用できる機能。 Actuator、より優れたロギング、モニタリング、メトリック、またはさまざまなPAAS統合など

  • 強化された開発エクスペリエンス。 多重検定ユーティリティまたはspring-boot-devtoolsを使用したより良いフィードバックループ

この記事では、Spring Boot2.0で計画されているいくつかの変更と機能について説明します。 また、これらの変更が生産性の向上にどのように役立つかについても説明します。

2. 依存関係

2.1. Javaベースライン

Spring Boot 2.x will no longer support Java 7 and below、Java8が最小要件です。

また、Java9をサポートする最初のバージョンでもあります。 1.xブランチでJava 9をサポートする予定はありません。 これはif you want to use the latest Java release and take advantage of this framework, Spring Boot 2.x is your only optionを意味します。

2.2. 部品表

Spring Bootの新しいリリースごとに、Javaエコシステムのさまざまな依存関係のバージョンがアップグレードされます。 これはブートbill of materials aka BOMで定義されます。

2.xでは、これも例外ではありません。 それらをリストすることは意味がありませんが、spring-boot-dependencies.pomを調べて、任意の時点で使用されているバージョンを確認できます。

最低限必要なバージョンに関するいくつかのハイライト:

  • Tomcatの最小サポートバージョンは8.5

  • Hibernateの最小サポートバージョンは5.2

  • Gradleの最小サポートバージョンは3.4です

2.3. Gradleプラグイン

Gradleプラグインは、大幅な改善といくつかの重大な変更を経ています。

To create fat jars, bootRepackage Gradle’s task gets replaced with bootJar and bootWarは、それぞれjarとwarを構築します。

Gradleプラグインを使用してアプリを実行する場合は、1.xでgradle bootRun.In 2.x bootRun extends Gradle’s JavaExec.を実行できます。これは、通常使用するのと同じ構成を適用して構成する方が簡単であることを意味します。従来のJavaExecタスク。

時々、Spring Boot BOMを利用したいと思うことがあります。 ただし、完全なBootアプリを作成したり、再パッケージしたりしたくない場合もあります。

この点で、Spring Boot 2.x will no longer apply the dependency management plugin by defaultを知ることは興味深いことです。

Spring Bootの依存関係管理が必要な場合は、次を追加する必要があります。

apply plugin: 'io.spring.dependency-management'

これにより、上記のシナリオで構成が少なくなり、柔軟性が向上します。

3. 自動設定

3.1. セキュリティ

2.xでは、セキュリティ構成が劇的に簡素化されます。 By default, everything is secured, including static resources and Actuator endpoints.

ユーザーがセキュリティを明示的に設定すると、Spring Bootのデフォルトは影響を停止します。 その後、ユーザーはすべてのアクセスルールを1か所で構成できます。

これにより、WebSecurityConfigurerAdapterの注文の問題に悩まされるのを防ぐことができます。 これらの問題は、通常、アクチュエータとアプリのセキュリティルールをカスタムの方法で構成するときに発生していました。

アクチュエータとアプリケーションのルールを組み合わせた簡単なセキュリティスニペットを見てみましょう。

http.authorizeRequests()
  .requestMatchers(EndpointRequest.to("health"))
    .permitAll() // Actuator rules per endpoint
  .requestMatchers(EndpointRequest.toAnyEndpoint())
    .hasRole("admin") // Actuator general rules
  .requestMatchers(PathRequest.toStaticResources().atCommonLocations())
    .permitAll() // Static resource security
  .antMatchers("/**")
    .hasRole("user") // Application security rules
  // ...

3.2. リアクティブサポート

Spring Boot 2は、さまざまなリアクティブモジュール用の新しいスターターのセットをもたらします。 いくつかの例は、WebFlux、およびMongoDB、Cassandra、またはRedisのリアクティブな対応物です。

WebFlux用のテストユーティリティもあります。 特に、@WebFluxTest.を利用できます。これは、1.4.0でさまざまなテストslicesの一部として最初に導入された古い@WebMvcTestと同様に動作します。

4. 本番対応機能

Spring Bootには、本番用のアプリケーションを作成できる便利なツールがいくつか用意されています。 とりわけ、Spring Boot Actuatorを活用できます。

アクチュエータには、監視、トレース、および一般的なアプリのイントロスペクションを簡素化するためのさまざまなツールが含まれています。 アクチュエータの詳細については、previous articleをご覧ください。

With its 2 version actuator has been through major improvements.この反復は、カスタマイズの簡素化に焦点を当てています。 また、新しいリアクティブモジュールなど、他のWebテクノロジーもサポートしています。

4.1. テクノロジーサポート

In Spring Boot 1.x only Spring-MVC was supported for actuator endpoints. In 2.x, however, it became independent and pluggable. Springブートにより、WebFlux、Jersey、およびSpring-MVCがすぐにサポートされるようになりました。

前と同様に、JMXはオプションのままであり、構成を通じて有効または無効にすることができます。

4.2. カスタムエンドポイントの作成

新しいアクチュエータインフラストラクチャは、テクノロジーに依存しません。 このため、開発モデルはゼロから再設計されました。

新しいモデルは、柔軟性と表現力も向上させます。

アクチュエータのFruitsエンドポイントを作成する方法を見てみましょう。

@Endpoint(id = "fruits")
public class FruitsEndpoint {

    @ReadOperation
    public Map fruits() { ... }

    @WriteOperation
    public void addFruits(@Selector String name, Fruit fruit) { ... }
}

ApplicationContext,FruitsEndpointを登録すると、選択したテクノロジを使用してWebエンドポイントとして公開できます。 構成に応じて、JMX経由で公開することもできます。

エンドポイントをWebエンドポイントに変換すると、次の結果になります。

  • 果物を返す/application/fruitsGET

  • ペイロードに含める必要があるフルーツを処理する/applications/fruits/{a-fruit}POST

さらに多くの可能性があります。 より詳細なデータを取得できます。 また、基盤となるテクノロジーごとに特定の実装を定義できます(例:JMX vs. ウェブ)。 この記事では、あまり詳しく説明せずに、簡単な紹介として説明します。

4.3. アクチュエータのセキュリティ

Spring Boot 1.xでは、アクチュエータは独自のセキュリティモデルを定義しています。 このセキュリティモデルは、アプリケーションで使用されるものとは異なります。

これは、ユーザーがセキュリティを改善しようとしたときの多くの問題点の原因でした。

2.xでは、セキュリティ構成は、アプリケーションの他の部分が使用するのと同じ構成を使用して構成する必要があります。

デフォルトでは、ほとんどのアクチュエータエンドポイントは無効になっています。 これは、Spring Securityがクラスパスにあるかどうかとは無関係です。 statusおよびinfo,を超えて、他のすべてのエンドポイントをユーザーが有効にする必要があります。

4.4. その他の重要な変更

  • 現在、ほとんどの構成プロパティはmanagement.xxxの下にあります。例:management.endpoints.jmx

  • 一部のエンドポイントには新しい形式があります。 e.g.: env, flyway or liquibase

  • 定義済みのエンドポイントパスは構成できなくなりました

5. 強化された開発エクスペリエンス

5.1. より良いフィードバック

Spring Bootは1.3でdevtoolsを導入しました。

典型的な開発問題をスムーズに処理します。 たとえば、ビューテクノロジのキャッシュ。 また、自動再起動とブラウザのライブリロードも実行します。 また、アプリのリモートデバッグが可能になります。

In 2.x when our application gets restarted by devtools a ‘delta' report will be printed out。 このレポートは、何が変更されたか、そしてそれがアプリケーションに与える影響を指摘します。

SpringBootによって構成されたものをオーバーライドするJDBCデータソースを定義するとします。

Devtoolsは、自動構成されたものが作成されなくなったことを示します。 また、原因を指摘します。タイプjavax.sql.DataSource.@ConditionalOnMissingBeanの不一致は、再起動を実行すると、Devtoolsがこのレポートを出力します。

5.2. 重大な変更

JDK 9の問題により、devtoolsはHTTPを介したリモートデバッグのサポートを廃止しています。

6. 概要

この記事では、Spring Boot 2によってもたらされるいくつかの変更について説明しました。

依存関係と、Java 8がサポートされる最小バージョンになる方法について説明しました。

次に、自動構成について説明しました。 特にセキュリティに焦点を当てました。 また、アクチュエータとそれが受けた多くの改善についても話しました。

最後に、提供されている開発ツールで発生したいくつかのマイナーな調整について説明しました。