1. 概要

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

この人気のある図書館が私たちを助けようとするさまざまな分野があります。

  • 依存関係の管理。 スターターとさまざまなパッケージマネージャーの統合を通じて
  • 自動構成。 Springアプリが準備を整えるために必要な設定より規約の量を最小限に抑えようとし、設定より規約を優先する
  • プロダクション対応機能。 アクチュエータ、より優れたロギング、モニタリング、メトリクス、またはさまざまなPAAS統合など
  • 強化された開発経験。 複数のテストユーティリティまたはspring-boot-devtoolsを使用したより良いフィードバックループ

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

2. 依存関係

2.1. Javaベースライン

Spring Boot2.xはJava7以下をサポートしなくなり、Java8が最小要件になります。

Java9をサポートする最初のバージョンでもあります。 1.xブランチでJava9をサポートする予定はありません。 つまり、最新のJavaリリースを使用してこのフレームワークを利用する場合は、SpringBoot2.xが唯一のオプションです

2.2. 部品表

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

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

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

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

2.3. Gradleプラグイン

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

ファットjarを作成するために、bootRepackageGradleのタスクがbootJarとbootWarに置き換えられ、それぞれjarとwarが作成されます。

Gradleプラグインを使用してアプリを実行したい場合は、1.xでgradlebootRunを実行できます。2.xではbootRunがGradleのJavaExecを拡張します。これは、従来のJavaExecタスクで通常使用するのと同じ構成を適用して構成します。

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

この点で、 SpringBoot2.xがデフォルトで依存関係管理プラグインを適用しなくなることを知っているのは興味深いことです

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

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

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

3. 自動構成

3.1. 安全

2.xでは、セキュリティ構成が大幅に簡素化されます。 デフォルトでは、静的リソースやアクチュエータエンドポイントを含むすべてが保護されています。

ユーザーがセキュリティを明示的に構成すると、SpringBootのデフォルトは影響を停止します。 その後、ユーザーはすべてのアクセスルールを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でさまざまなテストスライスの一部として最初に導入された古い@WebMvcTestと同様に動作します。 0。

4. 生産準備機能

Spring Bootは、本番環境に対応したアプリケーションを作成できるようにするための便利なツールをいくつか提供します。 特に、SpringBootActuatorを利用できます。

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

2バージョンのアクチュエーターにより、大幅な改善が行われました。この反復では、カスタマイズの簡素化に重点を置いています。 また、新しいリアクティブモジュールを含む他のWebテクノロジーもサポートしています。

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

Spring Boot 1.xでは、Spring-MVCのみがアクチュエーターエンドポイントでサポートされていました。 ただし、2.xでは、独立してプラグイン可能になりました。 Springブートにより、WebFlux、Jersey、およびSpring-MVCのサポートがすぐに利用できるようになりました。

以前と同様に、JMXはオプションのままであり、構成によって有効または無効にできます。

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

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

新しいモデルはまた、より優れた柔軟性と表現力をもたらします。

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

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

    @ReadOperation
    public Map<String, Fruit> fruits() { ... }

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

FruitsEndpointApplicationContextに登録すると、は、選択したテクノロジーを使用してWebエンドポイントとして公開できます。 構成によっては、JMXを介して公開することもできます。

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

  • GET on / application /fruits果物を返す
  • POST on / Applications / FRuits / {a-fruit} は、ペイロードに含める必要のあるフルーツを処理します

もっと多くの可能性があります。 より詳細なデータを取得できます。 また、基盤となるテクノロジーごとに特定の実装を定義することもできます(たとえば、JMXと ウェブ)。 この記事の目的のために、あまり詳細に立ち入ることなく、簡単な紹介としてそれを保持します。

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

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

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

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

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

4.4. その他の重要な変更

  • 現在、ほとんどの構成プロパティは management.xxx の下にあります。例: management.endpoints.jmx
  • 一部のエンドポイントには新しい形式があります。 例: env、flywayまたはliquibase
  • 事前定義されたエンドポイントパスは構成できなくなりました

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

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

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

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

2.xでは、アプリケーションがdevtoolsによって再起動されると、「デルタ」レポートが出力されます。 このレポートでは、変更内容と、それがアプリケーションに与える可能性のある影響について説明します。

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

D evtools は、自動構成されたものが作成されなくなったことを示します。 また、原因を指摘します。 @ConditionalOnMissingBean for typejavax.sql.DataSource。D evtools は、実行するとこのレポートを出力します。再起動。

5.2. 重大な変更

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

6. 概要

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

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

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

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