blog

springboot自動アセンブリ用のカスタムスターター

Spring Bootの自動設定は、その名が示すように、自動設定は、設定の海から解放されることを願っています。そして、自動設定以来、それは3つの問題を解決する必要があります:例えば:プロジェクトを作成...

Jul 30, 2020 · 4 min. read
シェア

Spring Bootの自動設定は、その名の通り、自動で設定できるようになることで、設定の苦海から解放されることを期待しています。ということで、自動設定をしたいので、3つの問題を解決する必要があります:

1、どのような条件を満たすか?

2、それらのビーンズを作成しますか?

3、Beanの作成は、それらのプロパティを持っていますか?

例:springbootプロジェクトを作成するときに、依存関係spring - boot - starter - webの導入は、自動的にポート8080 tomcatを作成し、設定ファイルapplication.yamlを介してプロジェクトのカスタムポートを設定します。

簡単に説明します:

1、どのような条件?スプリングブートスタータウェブ依存関係の導入のためです。

2、どの豆の作成? 組み込みのtomcatが作成され、起動します。

3、作成されたBeanのプロパティは何ですか?カスタムポートは、application.yamlを介して設定されました。

このクラスの主な目的は、tomcat/netty/Jetty/Undertowの4つのサーバーを含む組み込みサーバーの作成を担当することです。

クラスに@Configurationアノテーションを追加して、これがSpring設定クラスであることを宣言します。

メソッドに@Beanアノテーションを追加して、このメソッドがSpring Beanを作成することを宣言します。

<1.1> クラスに @Configuration アノテーションを追加して、これが構成クラスであることを宣言します。クラス名の末尾にAutoConfigurationがついているのは、自動設定を目的としているからです。

<1.2>つまり、Tomcatの初期化に使用される構成クラスです。

このように、@Configurationアノテーションを付けた構成クラスは、「どのBeanを作成するか」という問題を解決してくれると結論づけることができます。

<2.1>ConditionalOnWebApplication条件アノテーションをクラスに追加することで、現在の設定クラスを有効にするにはWebプロジェクトに存在する必要があることを示します。SpringBootプロジェクトでは、プロジェクトの種類はWebプロジェクトと非Webプロジェクトに分かれています。EmbeddedWebSerbeFatctoryCustomizerAutoConfiguration設定クラスがプロジェクトタイプがWebプロジェクトで必要になる理由は簡単で、組み込みWebサーバーahを作成するために必要なのはWebプロジェクトだけです。

条件付き @ConditionalOnClass アノテーションは、現在の構成クラスが有効になるためには、指定されたクラスの条件下で現在のプロジェクトに存在する必要があることを示します。

このように、条件付きアノテーションを通して、"どのような条件を満たすか?"という問題を解決できるという結論を得ることができます。という問題の

<3.2>TomcatWebServerFactoryCustomizerオブジェクトを作成するとき、作成したWebサーバーを設定するためのServerPropertiesを渡します。つまり、設定ファイルの設定項目を変更することで、Webサーバの設定をカスタマイズすることができます。

このように、プロパティを設定することで、「作成したBeanのプロパティは何か」という問題を解決できると結論づけることができます。の問題を解決することができます。

ここまでで、SpringBootの理解が比較的明確になってきたのは、上記の3つの問題を解決する方法ですが、これでもまだ自動設定は実現できていません。たとえば、spring - boot - starter - webやその他の依存関係の導入SpringBootはどのようにコードを掃除する設定クラスを知っています。

このように、設定クラスの元の@ Configurationアノテーションは、クラスの自動設定クラスにアップグレードされます。この方法では、SpringBootは自動的に設定クラスを構成する必要性では、自動的に自動設定機能を完了するために対応するBeanを作成することができます。

カスタムスターターの実装

両側に2つのモジュールでプロジェクトを開始します。

module1 はスターターを提供するために使われ、module2 はスターターを使うために使われます。

これはコンフィギュレーション用のプロパティクラスです。つまり、application.propertiesのlmd.serverで始まるプロパティを読み込みます。

以下はコンフィギュレーション自動アセンブリクラスです。

次に module2 の pom.xml ファイルに module1 の依存関係を導入します。

次に、module2 の application.properties にプロパティを定義します。

最後のステップでは、module2 のスタートアップクラスを直接実行します。

最後に、カスタム・スターターへの参照が成功していることを確認してください。

注意: module1 の pom ファイル

4.0.0 com.example demo 0.0.1-SNAPSHOT demo Spring Boot用デモプロジェクト

<properties>
 <java.version>1.8</java.version>
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 <spring-boot.version>2.3.0.RELEASE</spring-boot.version>
</properties>
<dependencies>
 <!-- Spring Boot Starterベースライブラリの紹介 -->
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter</artifactId>
 <version>2.1.8.RELEASE</version>
 </dependency>
</dependencies>

module2のpomファイル

4.0.0 com.springboot stater 0.0.1-SNAPSHOT stater Spring Bootのデモプロジェクト。

<properties>
 <java.version>1.8</java.version>
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<dependencies>
 <dependency>
 <groupId>com.example</groupId>
 <artifactId>demo</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 </dependency>
</dependencies>
Read next

ヒープ深さ-ブレッド幅-リートコード

'、'{'、'}'、'['、']'だけを含む文字列が与えられたとき、その文字列が有効かどうかを判定しなさい。 左括弧は同じ型の右括弧で閉じられていなければなりません。 左括弧は正しい順序で閉じなければなりません。 空文字列も有効な文字列とみなすことができることに注意してください。 毎日の気温のリストに基づいて新しいリストを生成します。対応する位置の出力は次のとおりです: より高い気温を観測するには...

Jul 30, 2020 · 3 min read