(7)Spring Boot Starter的介紹及使用
Spring Boot 的便利性體現在,它簡化了很多煩瑣的配置,這對於開發人員來說是一個福音,透過引入各種 Spring Boot Starter 包可以快速搭建出一個專案的腳手架 。
目前提供的 Spring Boot Starter 包有:
spring-boot-starter-web:快速構建基於 Spring MVC 的 Web 專案,使用 Tomcat 做預設嵌入式容器。
spring-boot-starter-data-redis:操作 Redis。
spring-boot-starter-data-mongodb:操作 Mongodb。
spring-boot-starter-data-jpa:操作 Mysql。
spring-boot-starter-activemq:操作 Activemq。
……
自動配置非常方便,當我們要操作 Mongodb 的時候,只需要引入 spring-boot-starter-data-mongodb 的依賴,然後配置 Mongodb 的連結資訊 spring.data.mongodb.uri=mongodb://localhost/test 就可以使用 MongoTemplate 來運算元據,MongoTemplate 的初始化工作全部交給 Starter 來完成。
自動配置麻煩的是當出現錯誤時,排查問題的難度上升了。自動配置的邏輯都在 Spring Boot Starter 中,要想快速定位問題,就必須得了解 Spring Boot Starter 的內部原理。接下來我們自己動手來實現一個 Spring Boot Starter。
Spring Boot Starter專案建立
建立一個專案 spring-boot-starter-demo,pom.xml 配置程式碼如下所示。
建立一個配置類,用於在屬性檔案中配置值,相當於 spring.data.mongo 這種形式,程式碼如下所示。
再定義一個 Client,相當於 MongoTemplate,裡面定一個方法,用於獲取配置中的值,程式碼如下所示。
自動建立客戶端
一個最基本的 Starter 包定義好了,但目前肯定是不能使用 UserClient,因為我們沒有自動構建 UserClient 的例項。接下來開始構建 UserClient,程式碼如下所示。
Spring Boot 會預設掃描跟啟動類平級的包,假如我們的 Starter 跟啟動類不在同一個主包下,如何能讓 UserAutoConfigure 生效?
在 resources 下建立一個 META-INF 資料夾,然後在 META-INF 資料夾中建立一個 spring.factories 檔案,檔案中指定自動配置的類:
Spring Boot 啟動時會去讀取 spring.factories 檔案,然後根據配置啟用對應的配置類,至此一個簡單的 Starter 包就實現了。
使用 Starter
現在可以在其他的專案中引入這個 Starter 包,程式碼如下所示。
引入之後就直接可以使用 UserClient,UserClient 在專案啟動的時候已經自動初始化好,程式碼如下所示。
屬性檔案中配置 name 的值和開啟 UserClient:
訪問 /user/name 就可以返回我們配置的 zhangsan。
使用註解開啟 Starter 自動構建
很多時候我們不想在引入 Starter 包時就執行初始化的邏輯,而是想要由使用者來指定是否要開啟 Starter 包的自動配置功能,比如常用的 @EnableAsync 這個註解就是用於開啟呼叫方法非同步執行的功能。
同樣地,我們也可以透過註解的方式來開啟是否自動配置,如果用註解的方式,那麼 spring.factories 就不需要編寫了,下面就來看一下怎麼定義啟用自動配置的註解,程式碼如下所示。
這段程式碼的核心是 @Import({UserAutoConfigure.class}),透過匯入的方式實現把 UserAutoConfigure 例項加入 SpringIOC 容器中,這樣就能開啟自動配置了。
使用方式就是在啟動類上加上該註解,程式碼如下所示。
使用配置開啟 Starter 自動構建
在某些場景下,UserAutoConfigure 中會配置多個物件,對於這些物件,如果不想全部配置,或是想讓使用者指定需要開啟配置的時候再去構建物件,這個時候我們可以透過 @ConditionalOnProperty 來指定是否開啟配置的功能,程式碼如下所示。
透過上面的配置,只有當啟動類加了 @EnableUserClient 並且配置檔案中 spring.user.enabled=true 的時候才會自動配置 UserClient。
配置 Starter 內容提示
在自定義 Starter 包的過程中,還有一點比較重要,就是對配置的內容項進行提示,需要注意的是,Eclipse 中是不支援提示的,Spring Tools 4 for Eclipse 中可以提示。
定義提示內容需要在 META-INF 中建立一個 spring-configuration-metadata.json 檔案,程式碼如下所示。
name:配置名
type:配置的資料型別
defaultValue:預設值
需要框架原始碼請看我個人簡介
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70006413/viewspace-2917676/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- java Spring Cloud企業快速開發架構之Spring Boot Starter的介紹及使用JavaCloud架構Spring Boot
- Spring Boot 自定義 starterSpring Boot
- 自定義Spring Boot StarterSpring Boot
- spring-boot-starter-testSpringboot
- 自定義 Spring Boot StarterSpring Boot
- Spring Boot學習(一)——Spring Boot介紹Spring Boot
- Spring Boot(七):spring boot測試介紹Spring Boot
- 使用mica-auto生成Spring boot starter配置Spring Boot
- 聊聊arthas的spring-boot-starterSpringboot
- 自研 Pulsar Starter:winfun-pulsar-spring-boot-starterSpringboot
- Spring Boot(3)---自定義spring boot starter 問題Spring Boot
- Spring Boot Starter 和 ABP ModuleSpring Boot
- 理解spring-boot-starter-parentSpringboot
- 【spring-boot】自定義starterSpringboot
- spring-boot-starter-redis 整合SpringbootRedis
- 如何實現自己的Spring Boot StarterSpring Boot
- spring-boot - 編寫自己的starterSpringboot
- 開發一個Spring Boot Starter!Spring Boot
- 禁用 Spring Boot 中引入安全元件 spring-boot-starter-security 的方法Spring Boot元件
- 【Java面試】如何理解Spring Boot中的Starter?Java面試Spring Boot
- (第五講)自定義Spring Boot StarterSpring Boot
- spring-boot-starter-amqp踩坑記SpringbootMQ
- 快速建立一個spring-boot-starterSpringboot
- Jasypt工具類(jasypt-spring-boot-starter)Springboot
- 建立自己的定製的Spring Boot Starter快速指南Spring Boot
- 快速開發一個自定義 Spring Boot Starter,並使用它Spring Boot
- 小代學Spring Boot之自定義StarterSpring Boot
- 官方 Dubbo Spring Boot Starter 1.0.0 公測版Spring Boot
- Spring Boot學習總結(11)——SpringBoot的Starter依賴包及作用Spring Boot
- vagrant介紹及使用
- JEB工具的介紹及使用
- Spring Boot下的一個DDD案例原始碼介紹Spring Boot原始碼
- Spring Boot Admin簡介及實踐Spring Boot
- 匿名函式託管 func-spring-boot-starter函式Springboot
- func-spring-boot-starter 匿名函式託管Springboot函式
- Shade in spring-boot-starter-parent is misconfigurSpringboot
- Spring Boot 基本配置之依賴管理starter pomSpring Boot
- 最詳細的自定義Spring Boot Starter開發教程Spring Boot