spring starterによるspring boot starter
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のマッピング情報
スピーカー交代