感謝您的閱讀,本文由 楊斌的博客 版權(quán)所有样屠。
如若轉(zhuǎn)載,請(qǐng)注明出處:楊斌的博客(https://y0ngb1n.github.io/a/coustomize-your-own-spring-boot-starter.html)
在這里我們一起動(dòng)手實(shí)現(xiàn)一個(gè)屬于自己的起步依賴
代碼托管于 GitHub缺脉,歡迎 Star :kissing_heart:
主要內(nèi)容
主要加入兩個(gè)模塊痪欲,一個(gè)是與自動(dòng)配置相關(guān)的模塊,如果你的依賴需要做自動(dòng)配置攻礼,那么我們可以在里面寫上自動(dòng)配置业踢。另一個(gè)是 starter
模塊,它里面就是一些依賴項(xiàng)礁扮,首先就是指向我們的 autoconfigure
模塊的一個(gè)依賴知举,另外就是當(dāng)前這個(gè) Starter 所自己需要的依賴項(xiàng)瞬沦。
-
autoconfigure
模塊,包含自動(dòng)配置代碼 -
starter
模塊雇锡,包含指向自動(dòng)配置模塊的依賴及其他相關(guān)依賴
這里說明一下逛钻,autoconfigure
并不是必須的,如果當(dāng)前這個(gè)模塊并不需要什么自動(dòng)配置锰提,就可以把它去掉曙痘。而 Spring Boot 相關(guān)的那些自動(dòng)配置很多都是集中在 spring-boot-autoconfigure
里面的,所以它只要依賴了 spring-boot-starter
立肘,那么就會(huì)自動(dòng)地加入這些 Autoconfigure边坤。
命名方式
一般是建議在前面加上一個(gè)前綴,主要是與 Spring Boot 官方的那些依賴做區(qū)分谅年,如下所示:
- xxx-spring-boot-autoconfigure
- xxx-spring-boot-starter
這樣就可以定義一個(gè)你自己的 Spring Boot Starter 了茧痒。
一些注意事項(xiàng)
-
不要使用
spring-boot
作為依賴的前綴如果你這樣做了,會(huì)和 Spring Boot 官方的那些依賴混在一起踢故,從而導(dǎo)致不好辨認(rèn)文黎。
-
不要使用
spring-boot
的配置命名空間另外如果你有一些配置惹苗,這里也是建議不要使用 Spring Boot 已經(jīng)在使用的配置命名空間殿较。比方說它里面有
server
、management
相關(guān)的這些配置項(xiàng)桩蓉,那么你就不要再使用以server
淋纲、management
命名前綴的配置了。 -
starter
中僅添加必要的依賴在當(dāng)前這個(gè) Starter 中只加入必要的依賴就可以了院究。也許這個(gè)要求有點(diǎn)苛克洽瞬,但這里的建議是希望你的依賴不多不少、正正好好业汰,你要使用到哪些依賴就只加這些依賴就好伙窃;如果沒有必要加進(jìn)去的就可以去掉它,這樣的好處是可以減少最終打出來的包里面的依賴样漆。
-
聲明對(duì)
spring-boot-starter
的依賴如果有需要的可以在這個(gè) Starter 當(dāng)中加入
spring-boot-starter
這個(gè)依賴为障。這個(gè)并不是必須的,因?yàn)槲覀儸F(xiàn)在很多的工程本身就是spring-boot
的一個(gè)項(xiàng)目放祟,所以它本身就添加了對(duì)spring-boot-starter
的依賴鳍怨。這個(gè)要看你的需要來決定一下是否要添加。
擼起袖子加油干
下面我們來看看都有哪些方式可以實(shí)現(xiàn)自動(dòng)配置
-
傳統(tǒng)手工實(shí)現(xiàn)的自動(dòng)配置(見
custom-starter-spring-lt4-autoconfigure
)注:在低版本的 Spring 中能使用這種方式快速實(shí)現(xiàn)類似自動(dòng)配置的功能跪妥。
<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 的自動(dòng)配置(見
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>
運(yùn)行 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 : Starting AutoconfigureDemoApplication on HP with PID 17236 ...
2019-05-02 23:15:56.208 INFO 17236 --- [ main] i.g.y.s.d.AutoconfigureDemoApplication : No active profile set, falling back to default profiles: default
2019-05-02 23:15:57.198 INFO 17236 --- [ main] i.g.y.s.g.GreetingApplicationRunner : Initializing GreetingApplicationRunner.
2019-05-02 23:15:57.478 INFO 17236 --- [ main] i.g.y.s.d.AutoconfigureDemoApplication : Started AutoconfigureDemoApplication in 2.516 seconds (JVM running for 5.501)
2019-05-02 23:15:57.486 INFO 17236 --- [ main] i.g.y.s.g.GreetingApplicationRunner : Hello everyone! We all like Spring!
以上就是一個(gè)簡(jiǎn)單的 Starter鞋喇,在里面加入自己的自動(dòng)配置和相關(guān)的依賴。那么到這里你也可以實(shí)現(xiàn)一個(gè)屬于你的 Starter眉撵,從而簡(jiǎn)化你的 Maven 依賴項(xiàng)侦香。
參考鏈接
- 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