javascript
《SpringCloud超级入门》Spring Boot Starter的介绍及使用《七》
目錄
Spring Boot Starter項目創建
自動創建客戶端
使用 Starter
使用注解開啟 Starter 自動構建
使用配置開啟 Starter 自動構建
配置 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 配置代碼如下所示。
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency> </dependencies>創建一個配置類,用于在屬性文件中配置值,相當于 spring.data.mongo 這種形式,代碼如下所示。
import org.springframework.boot.context.properties.ConfigurationProperties; import lombok.Data; @Data @ConfigurationProperties("spring.user") public class UserPorperties {private String name; }再定義一個 Client,相當于 MongoTemplate,里面定一個方法,用于獲取配置中的值,代碼如下所示。
public class UserClient {private UserPorperties userPorperties;public UserClient() {}public UserClient(UserPorperties p) {this.userPorperties = p;}public String getName() {return userPorperties.getName();} }自動創建客戶端
一個最基本的 Starter 包定義好了,但目前肯定是不能使用 UserClient,因為我們沒有自動構建 UserClient 的實例。接下來開始構建 UserClient,代碼如下所示。
@Configuration @EnableConfigurationProperties(UserPorperties.class) public class UserAutoConfigure {@Bean@ConditionalOnProperty(prefix = "spring.user", value = "enabled", havingValue = "true")public UserClient userClient(UserPorperties userPorperties) {return new UserClient(userPorperties);} }Spring Boot 會默認掃描跟啟動類平級的包,假如我們的 Starter 跟啟動類不在同一個主包下,如何能讓 UserAutoConfigure 生效?
在 resources 下創建一個 META-INF 文件夾,然后在 META-INF 文件夾中創建一個 spring.factories 文件,文件中指定自動配置的類:
Spring Boot 啟動時會去讀取 spring.factories 文件,然后根據配置激活對應的配置類,至此一個簡單的 Starter 包就實現了。
使用 Starter
現在可以在其他的項目中引入這個 Starter 包,代碼如下所示。
<dependency> <groupId>com.cxytiandi</groupId> <artifactId>spring-boot-starter-demo</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>引入之后就直接可以使用 UserClient,UserClient 在項目啟動的時候已經自動初始化好,代碼如下所示。
@RestController public class UserController {@Autowired private UserClient userClient;@GetMapping("/user/name") public String getUserName() { return userClient.getName(); } }屬性文件中配置 name 的值和開啟 UserClient:
spring.user.name=zhangsan spring.user.enabled=true訪問 /user/name 就可以返回我們配置的 zhangsan。
使用注解開啟 Starter 自動構建
很多時候我們不想在引入 Starter 包時就執行初始化的邏輯,而是想要由用戶來指定是否要開啟 Starter 包的自動配置功能,比如常用的 @EnableAsync 這個注解就是用于開啟調用方法異步執行的功能。
同樣地,我們也可以通過注解的方式來開啟是否自動配置,如果用注解的方式,那么 spring.factories 就不需要編寫了,下面就來看一下怎么定義啟用自動配置的注解,代碼如下所示。
這段代碼的核心是 @Import({UserAutoConfigure.class}),通過導入的方式實現把 UserAutoConfigure 實例加入 SpringIOC 容器中,這樣就能開啟自動配置了。
使用方式就是在啟動類上加上該注解,代碼如下所示。
使用配置開啟 Starter 自動構建
在某些場景下,UserAutoConfigure 中會配置多個對象,對于這些對象,如果不想全部配置,或是想讓用戶指定需要開啟配置的時候再去構建對象,這個時候我們可以通過 @ConditionalOnProperty 來指定是否開啟配置的功能,代碼如下所示。
@Bean @ConditionalOnProperty(prefix = "spring.user",value = "enabled",havingValue = "true") public UserClient userClient(UserPorperties userPorperties) { return new UserClient(userPorperties); }通過上面的配置,只有當啟動類加了 @EnableUserClient 并且配置文件中 spring.user.enabled=true 的時候才會自動配置 UserClient。
配置 Starter 內容提示
在自定義 Starter 包的過程中,還有一點比較重要,就是對配置的內容項進行提示,需要注意的是,Eclipse 中是不支持提示的,Spring Tools 4 for Eclipse 中可以提示。
定義提示內容需要在 META-INF 中創建一個 spring-configuration-metadata.json 文件,代碼如下所示。
- name:配置名
- type:配置的數據類型
- defaultValue:默認值
上一篇《SpringCloud超級入門》Spring Boot項目搭建步驟(超詳細)《六》
下一篇 介紹Spring Cloud Eureka是什么?
相關springboot實戰項目推薦
基于java ssm springboot+VUE疫情防疫系統系統前后端分離設計和實現
基于java springboot+mybatis電影售票網站管理系統前臺+后臺設計和實現
基于java ssm springboot+mybatis酒莊內部管理系統設計和實現
基于JAVA springboot+mybatis智慧生活分享平臺設計和實現
基于Java springboot+vue+redis前后端分離家具商城平臺系統設計和實現
基于JAVA SSM springboot實現的抗疫物質信息管理系統設計和實現
查看更多首頁實戰項目 >>>
總結
以上是生活随笔為你收集整理的《SpringCloud超级入门》Spring Boot Starter的介绍及使用《七》的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle 数据怎么实时同步到 PgS
- 下一篇: 基于jsp+Spring+mybatis