ここでは、自分だけのスタート依存関係を実現します
コードは GitHub にホストされています。スターを歓迎します 😘
主要内容#
主に 2 つのモジュールを追加します。1 つは自動構成に関連するモジュールで、依存関係が自動構成を必要とする場合は、その中に自動構成を記述できます。もう 1 つは starter
モジュールで、そこにはいくつかの依存項目が含まれています。まず、私たちの autoconfigure
モジュールへの依存を指し、次にこの Starter 自体が必要とする依存項目です。
autoconfigure
モジュール、自動構成コードを含むstarter
モジュール、自動構成モジュールへの依存およびその他の関連依存を含む
ここで説明しますが、autoconfigure
は必須ではありません。現在のモジュールが自動構成を必要としない場合は、削除できます。また、Spring Boot に関連する自動構成の多くは spring-boot-autoconfigure
に集中しているため、spring-boot-starter
に依存している場合は、これらの Autoconfigure が自動的に追加されます。
命名方式#
一般的には、前にプレフィックスを追加することをお勧めします。これは、Spring Boot の公式依存関係と区別するためです。以下のようになります:
- xxx-spring-boot-autoconfigure
- xxx-spring-boot-starter
これにより、自分の Spring Boot Starter を定義できます。
一部の注意事項#
-
依存関係のプレフィックスとして
spring-boot
を使用しないでくださいこれを行うと、Spring Boot の公式依存関係と混ざり合い、識別が難しくなります。
-
spring-boot
の設定名前空間を使用しないでくださいまた、設定がある場合は、Spring Boot がすでに使用している設定名前空間を使用しないことをお勧めします。たとえば、
server
、management
に関連する設定項目がある場合は、server
、management
というプレフィックスの設定を使用しないでください。 -
starter
に必要な依存関係のみを追加現在の Starter には必要な依存関係のみを追加すれば大丈夫です。この要求は少し厳しいかもしれませんが、依存関係が多すぎず、少なすぎず、ちょうど良いことを望んでいます。使用する依存関係だけを追加し、必要のないものは削除してください。これにより、最終的に生成されるパッケージ内の依存関係を減らすことができます。
-
spring-boot-starter
への依存を宣言必要に応じて、この Starter に
spring-boot-starter
という依存関係を追加できます。これは必須ではありません。現在、多くのプロジェクトはすでにspring-boot
プロジェクトであり、spring-boot-starter
への依存関係が追加されています。必要に応じて追加するかどうかを決定してください。
袖をまくって頑張ろう#
次に、自動構成を実現する方法を見てみましょう。
-
従来の手動実装による自動構成(見てください
custom-starter-spring-lt4-autoconfigure
)注:低バージョンの Spring では、この方法を使用して自動構成に似た機能を迅速に実現できます。
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <dependency> <groupId>io.github.y0ngb1n.samples</groupId> <artifactId>custom-starter-core</artifactId> <scope>provided</scope> </dependency> </dependencies>
-
Spring Boot に基づく自動構成(見てください
custom-starter-spring-boot-autoconfigure
)<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> </dependency> <dependency> <groupId>io.github.y0ngb1n.samples</groupId> <artifactId>custom-starter-core</artifactId> <scope>provided</scope> </dependency> </dependencies>
-
カスタム Starter の参照(見てください
custom-starter-spring-boot-starter
)<dependencies> <dependency> <groupId>io.github.y0ngb1n.samples</groupId> <artifactId>custom-starter-spring-boot-starter</artifactId> </dependency> </dependencies>
custom-starter-examples
を実行すると、次のような結果が得られます:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.0.RELEASE)
2019-05-02 23:15:56.183 INFO 17236 --- [ main] i.g.y.s.d.AutoconfigureDemoApplication : AutoconfigureDemoApplicationをHPでPID 17236で起動中...
2019-05-02 23:15:56.208 INFO 17236 --- [ main] i.g.y.s.d.AutoconfigureDemoApplication : アクティブなプロファイルが設定されていないため、デフォルトプロファイルにフォールバックします: default
2019-05-02 23:15:57.198 INFO 17236 --- [ main] i.g.y.s.g.GreetingApplicationRunner : GreetingApplicationRunnerを初期化中。
2019-05-02 23:15:57.478 INFO 17236 --- [ main] i.g.y.s.d.AutoconfigureDemoApplication : 2.516秒でAutoconfigureDemoApplicationを起動しました (JVMは5.501秒実行中)
2019-05-02 23:15:57.486 INFO 17236 --- [ main] i.g.y.s.g.GreetingApplicationRunner : みなさん、こんにちは!私たちはみんなSpringが好きです!
これがシンプルな Starter であり、自分の自動構成と関連する依存関係を追加しました。これで、あなた自身の Starter を実現し、Maven の依存関係を簡素化できます。
参考リンク#
- https://github.com/y0ngb1n/spring-boot-samples
- https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/
- https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-auto-configuration.html
- https://medium.com/@alexeynovikov_89393/how-to-write-your-own-spring-boot-starters-566ce5992954
- https://github.com/digitalsonic/geektime-spring-family
- https://github.com/marcosbarbero/spring-cloud-zuul-ratelimit
- https://github.com/biezhi/keeper