SpringCloud-Spring?Boot?Starter使用測(cè)試及問(wèn)題小結(jié)
Spring Boot Starter是什么?
Spring Boot Starter 是在 SpringBoot 組件中被提出來(lái)的一種概念、簡(jiǎn)化了很多煩瑣的配置、通過(guò)引入各種 Spring Boot Starter 包可以快速搭建出一個(gè)項(xiàng)目的腳手架。
比如我們經(jīng)常用的一些:
spring-boot-starter-web:
spring-boot-starter-data-redis:
spring-boot-starter-data-mongodb:
spring-boot-starter-data-jpa:
spring-boot-starter-activemq:
總體來(lái)說(shuō)就是 starter 是一種對(duì)依賴(lài)的合成。
以前傳統(tǒng)的做法
在沒(méi)有 starter 之前,傳統(tǒng)的SSM項(xiàng)目、假如我想要在 Spring 中使用 jpa,可能需要做以下操作:
首先在 Maven 中引入使用的數(shù)據(jù)庫(kù)的依賴(lài)>>然后引入 jpa 的依賴(lài)>>在xml中配置一些屬性信息>>調(diào)試調(diào)用直到可以正常運(yùn)行。
上面這樣的操作會(huì)有一些問(wèn)題、比如:
如果過(guò)程比較繁瑣,這樣一步步操作會(huì)增加出錯(cuò)的可能性。
在配置的時(shí)候也會(huì)劃掉大量的時(shí)間、對(duì)于新手和小白不太友好。
使用 Spring Boot Starter 之后
starter 的主要目的就是為了解決上面的這些問(wèn)題
starter 的理念:
starter 會(huì)把所有用到的依賴(lài)都給包含進(jìn)來(lái),避免了開(kāi)發(fā)者自己去引入依賴(lài)所帶來(lái)的麻煩。需要注意的是不同的 starter 是為了解決不同的依賴(lài),所以它們內(nèi)部的實(shí)現(xiàn)可能會(huì)有很大的差異,例如 jpa 的 starter 和 Redis 的 starter 可能實(shí)現(xiàn)就不一樣,這是因?yàn)?starter 的本質(zhì)在于 synthesize,這是一層在邏輯層面的抽象,也許這種理念有點(diǎn)類(lèi)似于 Docker,因?yàn)樗鼈兌际窃谧鲆粋€(gè) “包裝” 的操作,如果你知道 Docker 是為了解決什么問(wèn)題的,也許你可以用 Docker 和 starter 做一個(gè)類(lèi)比。
starter 的實(shí)現(xiàn):
雖然不同的 starter 實(shí)現(xiàn)起來(lái)各有差異,但是他們基本上都會(huì)使用到兩個(gè)相同的內(nèi)容:ConfigurationProperties 和 AutoConfiguration。因?yàn)?Spring Boot 堅(jiān)信 “約定大于配置” 這一理念,所以我們使用 ConfigurationProperties 來(lái)保存我們的配置,并且這些配置都可以有一個(gè)默認(rèn)值,即在我們沒(méi)有主動(dòng)覆寫(xiě)原始配置的情況下,默認(rèn)值就會(huì)生效,這在很多情況下是非常有用的。除此之外,starter 的 ConfigurationProperties 還使得所有的配置屬性被聚集到一個(gè)文件中(一般在 resources 目錄下的 application.properties),這樣我們就告別了 Spring 項(xiàng)目中 XML 地獄。

上面的 starter 依賴(lài)的 jar 和我們自己手動(dòng)配置的時(shí)候依賴(lài)的 jar 并沒(méi)有什么不同,所以我們可以認(rèn)為 starter 其實(shí)是把這一些繁瑣的配置操作交給了自己,而把簡(jiǎn)單交給了用戶(hù)。除了幫助用戶(hù)去除了繁瑣的構(gòu)建操作,在 “約定大于配置” 的理念下,ConfigurationProperties 還幫助用戶(hù)減少了無(wú)謂的配置操作。并且因?yàn)?code>application.properties文件的存在,即使需要自定義配置,所有的配置也只需要在一個(gè)文件中進(jìn)行,使用起來(lái)非常方便。采用的starter都上面都給大家列出來(lái)了。
創(chuàng)建Spring Boot Starter步驟
創(chuàng)建starter 項(xiàng)目
創(chuàng)建ConfigurationProperties 用來(lái)保存配置信息
創(chuàng)建AutoConfiguration,引用定義好的配置信息
在 AutoConfiguration 實(shí)現(xiàn)所有 starter 應(yīng)該完成的操作,并且把這個(gè)類(lèi)加入 spring.factories 配置文件中進(jìn)行聲明
打包項(xiàng)在 SpringBoot 項(xiàng)目中引入該項(xiàng)目依賴(lài),然后就可以使用該 starter 了
具體操作步驟:
在idea新建一個(gè)starter項(xiàng)目、直接執(zhí)行下一步即可生成項(xiàng)目。

在xml中加入如下配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>http-starter</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 自定義starter都應(yīng)該繼承自該依賴(lài) -->
<!-- 如果自定義starter本身需要繼承其它的依賴(lài),可以參考 https://stackoverflow.com/a/21318359 解決 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starters</artifactId>
<version>1.5.2.RELEASE</version>
</parent>
<dependencies>
<!-- 自定義starter依賴(lài)此jar包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- lombok用于自動(dòng)生成get、set方法 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.10</version>
</dependency>
</dependencies>
</project>創(chuàng)建 proterties 類(lèi)來(lái)保存配置信息
@ConfigurationProperties(prefix = "http")
@Getter
public class HttpProperties {
// 如果配置文件中配置了http.url屬性,則該默認(rèn)屬性會(huì)被覆蓋
private String url = "https://blog.csdn.net/weixin_39709134?type=blog";
}創(chuàng)建業(yè)務(wù)類(lèi):
@Setter
@Getter
public class HttpClient {
private String url;
// 根據(jù)url獲取網(wǎng)頁(yè)數(shù)據(jù)
public String getHtml() {
try {
URL url = new URL(this.url);
URLConnection urlConnection = url.openConnection();
BufferedReader br = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "utf-8"));
String line = null;
StringBuilder sb = new StringBuilder();
while ((line = br.readLine()) != null) {
sb.append(line).append("\n");
}
return sb.toString();
} catch (Exception e) {
e.printStackTrace();
}
return "error";
}
}這個(gè)業(yè)務(wù)類(lèi)包含了url屬性和一個(gè)getHtml方法,用于獲取一個(gè)網(wǎng)頁(yè)HTML 數(shù)據(jù)
創(chuàng)建 AutoConfiguration
@Configuration
@EnableConfigurationProperties(HttpProperties.class)
public class HttpAutoConfiguration {
@Resource
private HttpProperties properties; // 使用配置
// 在Spring上下文中創(chuàng)建一個(gè)對(duì)象
@Bean
@ConditionalOnMissingBean
public HttpClient init() {
HttpClient client = new HttpClient();
String url = properties.getUrl();
client.setUrl(url);
return client;
}
}在上面的 AutoConfiguration 中我們實(shí)現(xiàn)了自己要求:在 Spring 的上下文中創(chuàng)建了一個(gè) HttpClient 類(lèi)的 bean,并且我們把 properties 中的一個(gè)參數(shù)賦給了該 bean。
最后,我們?cè)?code>resources文件夾下新建目錄META-INF,在目錄中新建spring.factories文件,并且在spring.factories中配置 AutoConfiguration:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.nosuchfield.httpstarter.HttpAutoConfiguration
最后使用 Maven 打包該項(xiàng)目。之后創(chuàng)建一個(gè) SpringBoot 項(xiàng)目,在項(xiàng)目中添加我們之前打包的 starter 作為依賴(lài),然后使用 SringBoot 來(lái)運(yùn)行我們的 starter
測(cè)試如下:
@Component
public class RunIt {
@Resource
private HttpClient httpClient;
public void hello() {
System.out.println(httpClient.getHtml());
}
}
之后可以在 application.properties中修改配置來(lái)進(jìn)行測(cè)試證明 properties 中的數(shù)據(jù)確實(shí)被覆蓋
到此這篇關(guān)于SpringCloud-SpringBootStarter使用測(cè)試的文章就介紹到這了,更多相關(guān)SpringCloudSpringBootStarter使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 使用dynamic datasource springboot starter實(shí)現(xiàn)多數(shù)據(jù)源及源碼分析
- springboot自定義starter啟動(dòng)器的具體使用實(shí)踐
- 使用SpringBoot自定義starter詳解
- 使用SpringBoot自定義starter的完整步驟
- spring boot starter actuator(健康監(jiān)控)配置和使用教程
- SpringBoot入坑筆記之spring-boot-starter-web 配置文件的使用
- spring boot開(kāi)發(fā)遇到坑之spring-boot-starter-web配置文件使用教程
相關(guān)文章
將Java對(duì)象序列化成JSON和XML格式的實(shí)例
下面小編就為大家分享一篇將Java對(duì)象序列化成JSON和XML格式的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12
springboot?sleuth?日志跟蹤問(wèn)題記錄
Spring?Cloud?Sleuth是一個(gè)在應(yīng)用中實(shí)現(xiàn)日志跟蹤的強(qiáng)有力的工具,使用Sleuth庫(kù)可以應(yīng)用于計(jì)劃任務(wù)?、多線(xiàn)程服務(wù)或復(fù)雜的Web請(qǐng)求,尤其是在一個(gè)由多個(gè)服務(wù)組成的系統(tǒng)中,這篇文章主要介紹了springboot?sleuth?日志跟蹤,需要的朋友可以參考下2023-07-07
阿里規(guī)范:為何boolean類(lèi)型變量命名禁用is開(kāi)頭
這篇文章主要給大家介紹了關(guān)于阿里規(guī)范:為何boolean類(lèi)型變量命名禁用is開(kāi)頭的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
SpringBoot+Hutool實(shí)現(xiàn)圖片驗(yàn)證碼的示例代碼
圖片驗(yàn)證碼在注冊(cè)、登錄、交易、交互等各類(lèi)場(chǎng)景中都發(fā)揮著巨大作用,本文主要介紹了SpringBoot+Hutool實(shí)現(xiàn)圖片驗(yàn)證碼的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01
idea中MavenWeb項(xiàng)目不能創(chuàng)建Servlet的解決方案
這篇文章主要介紹了idea中MavenWeb項(xiàng)目不能創(chuàng)建Servlet的解決方案,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02
找不到正確的java_home路徑報(bào)錯(cuò)解決
本文主要介紹了找不到正確的java_home路徑報(bào)錯(cuò)解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
基于SpringBoot和Dify實(shí)現(xiàn)流式響應(yīng)輸出
這篇文章主要為大家詳細(xì)介紹了如何基于SpringBoot和Dify實(shí)現(xiàn)流式響應(yīng)輸出效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下2025-03-03
解決mybatis plus 分頁(yè)查詢(xún)有條數(shù),total和pages都是零的問(wèn)題
這篇文章主要介紹了解決mybatis plus 分頁(yè)查詢(xún)有條數(shù),total和pages都是零的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11
Spark網(wǎng)站日志過(guò)濾分析實(shí)例講解
這篇文章主要介紹了Spark網(wǎng)站日志過(guò)濾分析實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2023-02-02

