您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關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-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 文件,文件中指定自動配置的類:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.cxytiandi.demo.UserAutoConfigure
Spring Boot 啟動時會去讀取 spring.factories 文件,然后根據配置激活對應的配置類,至此一個簡單的 Starter 包就實現了。
現在可以在其他的項目中引入這個 Starter 包,代碼如下所示。
<dependency><groupId>com.cxytiandi</groupId><artifactId>spring-boot-starter-demo</artifactId><version>0.0.1-SNAPSHOT</version></dependency>
引入之后就直接可以使用 UserClient,UserClient 在項目啟動的時候已經自動初始化好,代碼如下所示。
@RestControllerpublic class UserController {@Autowiredprivate UserClient userClient;@GetMapping("/user/name")public String getUserName() {return userClient.getName(); } }
屬性文件中配置 name 的值和開啟 UserClient:
spring.user.name=zhangsanspring.user.enabled=true
訪問 /user/name 就可以返回我們配置的 zhangsan。
很多時候我們不想在引入 Starter 包時就執行初始化的邏輯,而是想要由用戶來指定是否要開啟 Starter 包的自動配置功能,比如常用的 @EnableAsync 這個注解就是用于開啟調用方法異步執行的功能。
同樣地,我們也可以通過注解的方式來開啟是否自動配置,如果用注解的方式,那么 spring.factories 就不需要編寫了,下面就來看一下怎么定義啟用自動配置的注解,代碼如下所示。
@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@Import({UserAutoConfigure.class}) public @interface EnableUserClient { }
這段代碼的核心是 @Import({UserAutoConfigure.class}),通過導入的方式實現把 UserAutoConfigure 實例加入 SpringIOC 容器中,這樣就能開啟自動配置了。
使用方式就是在啟動類上加上該注解,代碼如下所示。
@SpringBootApplicationpublic class SpringBootDemoApplication {public static void main(String[] args) { SpringApplication.run(SpringBootDemoApplication.class, args); } }
在某些場景下,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 包的過程中,還有一點比較重要,就是對配置的內容項進行提示,需要注意的是,Eclipse 中是不支持提示的,Spring Tools 4 for Eclipse 中可以提示。
定義提示內容需要在 META-INF 中創建一個 spring-configuration-metadata.json 文件,代碼如下所示。
{ "properties": [ { "name": "spring.user.name", "defaultValue": "cxytinadi" }, { "name": "spring.user.enabled", "type": "java.lang.Boolean", "defaultValue": false } ] }
name:配置名
type:配置的數據類型
defaultValue:默認值
上述就是小編為大家分享的Spring Boot Starter的簡介及用法是怎樣的了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。