spring starterによるspring boot starter

Post on 14-Apr-2017

860 Views

Category:

Engineering

10 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Boot starterが語る Spring bootの仕組み

&Spring 5以降の Reactiveな流れと

フロントまわりの話

株式会社タグバンガーズ

横浜・設立 6年目・Webアプリ開発・ほぼ Spring案件

TAG BAR月1ぐらい開催してる社外の方を招いて行う勉強会connpass(http://tagbar.connpass.com/)にて募集

軽く自己紹介

佐々木 亜里沙(ささき ありさ)UIチーム・プロダクトチーム北海道

内立 良介(うちたて りょうすけ)デベロップメントチーム宮崎

Spring starterによるSpring Boot Starter

株式会社タグバンガーズ 内立良介

AGENDASpring I/O 2016の様子セッション概要セッションの解釈(@AutoConfiguration, Starter)開発時の便利機能の紹介

Spring I/O 2016開催地:スペイン・バルセロナセッション数:2日間で48セッション参加者:26カ国、475人(うち日本からの参加:8人)

Session

AFTER EVENT PARTY

セッションの概要

CUSTOMIZE YOUR SPRING BOOT EXPERIENCE BY WRITING YOUR OWN SPRING BOOT STARTER

https://github.com/michael-simons/springio2016

ベースとなるセッション

Custom Spring Boot Starter –part1-Spring Boot Starterには様々な種類がある

Integration、 Template Engines、 Validationなどプロジェクトを作るときは以下の URLから作ると簡単に作れる

http://start.spring.io

Custom Spring Boot Starter –part2-標準的な AutoConfigurationに使用@ConditionalOnClass@AutoConfigureAfter、@AutoConfigureBefore@Bean

Custom Spring Boot Starter –part3-その他の条件指定・順序決め

@ConditionalOnProperty@ConditionalOnMissingBean@Order

セッションの解釈

@SpringBootApplicationって何者?

@SpringBootApplication3つのアノテーションを1つにまとめたもの@EnableAutoConfiguration

自動設定を有効にする@ComponentScan

このクラスのパッケージ配下で@Component, @Service, @Controller,@RestController, @Namedつきのクラスを DIコンテナに登録する

@Configurationこのクラス自体を Bean定義可能にする

@SpringBootApplicationの流れ(@EnableAutoConfigurationのみ)

1.DIコンテナ(ApplicationContext)作成

2.BeanFactory作成

3.spring.factries読込、BeanDefinition取捨選択、並び替え

4.Bean登録

さあ、 starterを作りましょう!!!

starterがやってくれることアプリケーションの開発に必要な依存関係を追加ライブラリを使うために必要な設定を追加

ネーミングルール

”spring-boot”ではじまる名前をつけてはいけない!

社内で作ったライブラリなどをstarterにすれば。。。

面倒な設定なしに使える!!

突然ですが、spring.factriesって知ってますか?

spring.factoriesorg.springframework.boot.autoconfigure.EnableAutoConfiguration=com.mycorp.libx.autoconfigure.LibXAutoConfiguration,com.mycorp.libx.autoconfigure.LibXWebAutoConfiguration

このように書けば、 Spring Bootが@EnableAutoConfigurationの対象と認識してくれる。デフォルトのパスは、META-INF/spring.factoriesとなっている。

作った starterを読み込ませたいなら

作った starterのAutoConfigurationのパスをMETA-INF/spring.factoriesに書けばいい。

というのはわかったけど。。。

依存関係があるから適用する順序を指定したい。

安心してください!順序指定できますよ!

インポート順序を指定するためのアノテーション@Order

引数に指定した順序で優先順位が決まる。最も小さい値が優先度が最も高い。

@AutoConfigureBefore指定した auto-configurationクラスより前に適用する。

@AutoConfigureAfter指定した auto-configurationクラスより後に適用する。

依存関係にあるクラスの有無でインポートするかどうか指定したい。

安心してください!指定できますよ!

Conditionアノテーションを使おう!

Conditonアノテーション@ConditionalOnClass(@ConditionalOnMissingClass)

指定したクラスがクラスパス上にあったら (なかったら )有効@ConditionalOnBean(@ConditionalOnMissingBean)

指定した Beanがあったら (なかったら )有効@ConditionalOnProperty

指定したプロパティがあったら有効

@ConditionalOnResource指定したリソースがあったら有効

@ConditionalOnWebApplication(@ConditionalOnNotWebApplication)

Webアプリケーションであったら (なかったら )有効

デモアプリケーションをみてみよう!!

テンプレートで<banner:show />を指定すれば、viewで bannerイメージを表示してくれる starter

セッションで行われたデモ

プロジェクトの構成

demoのpom.xml

AutoConfigurationクラス

spring.factories

開発時の便利機能の紹介

spring-boot-starter-actuatorシステムの状態やメトリクスを確認できる主なエンドポイント

autoconfigauto-configurationの候補と自動設定された理由・されなかった理由

beansDIコンテナに登録されている Beanの一覧

metricsメトリクス情報が見れる

mappings@RequestMappingのマッピング情報

スピーカー交代

top related