如何自制一個Spring Boot Starter並推送到遠端公服


概 述

傳統的 Maven項目通常將須要被複用的組件作成 Module來進行管理,以便二次調用;而在 Spring Boot項目中咱們則可使用更加優雅的 Spring Boot Starter來完成這一切。 基於Spring Boot開發應用的過程可謂是幸福感滿滿,其開箱即用的特性分析已經在 《SpringBoot 應用程序啓動過程探祕》一文中詳細敘述過了。這個開箱即用的魔法特性很大程度上來源於各式各樣 Spring Boot Starter的加持,並且隨着版本的迭代 Starter家族成員日益龐大,並且各類優秀開源做者也提供了不少很是好用的Spring Boot Starter。html

本文則嘗試自制一個Spring Boot Starter並推送到遠端倉庫進行管理。java

注: 本文首發於 My Personal Blog:CodeSheep·程序羊,歡迎光臨 小站git


新建項目

本文準備封裝一個簡單的 MD5摘要工具的 Starter,命名爲 md5test-spring-boot-starter,其本質就是一個 Maven項目,只不過咱們須要完善pom文件的相關依賴:github

<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-autoconfigure</artifactId>
	</dependency>
</dependencies>

<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-dependencies</artifactId>
			<version>2.1.1.RELEASE</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
	</dependencies>
</dependencyManagement>
複製代碼

編寫業務邏輯

首先提供一個 MD5Util工具類,負責實際的 MD5加密:算法

public class MD5Util {

    public static String getMD5( String source ) {
        return getMD5( source.getBytes() );
    }

    public static String getMD5(byte[] source) {
        String s = null;
        char hexDigits[] = { 
                '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
        try {
            java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
            byte tmp[];
            synchronized ( MD5Util.class ) {
                md.update(source);
                tmp = md.digest(); 
            }
            char str[] = new char[16 * 2]; 
            int k = 0;
            for (int i = 0; i < 16; i++) { 
                byte byte0 = tmp[i]; 
                str[k++] = hexDigits[byte0 >>> 4 & 0xf]; 
                str[k++] = hexDigits[byte0 & 0xf];
            }
            s = new String(str); 

        } catch (Exception e) {
            e.printStackTrace();
        }
        return s;
    }

}
複製代碼

再來提供一個 MD5Service類 進行一次封裝spring

public class MD5Service {
    public String getMD5( String input ) {
        return MD5Util.getMD5( input.getBytes() );
    }
}
複製代碼

編寫自動裝配類

這一步十分重要,也是編寫 Spring Boot Starter最重要的一步:springboot

@Configuration
public class MD5AutoConfiguration {
    @Bean
    MD5Service md5Service() {
        return new MD5Service();
    }
}
複製代碼

固然此處能夠說是最簡自動裝配類了,該部分其實還包含各類豐富的可控註解,能夠 參考這裏bash


編寫spring.factories

咱們還須要在 resources/META-INF/ 下建立一個名爲 spring.factories的文件,而後置入如下內容:app

org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.codesheep.auto.MD5AutoConfiguration
複製代碼

這一步也是至關重要哇,爲何這一步這麼重要呢,由於我已經在文章《SpringBoot 應用程序啓動過程探祕》 中講過了,Spring Boot自動注入的奧祕就來源於 Spring Boot應用在啓動過程當中會經過 SpringFactoriesLoader 加載全部 META-INF/spring.factories 文件,經過一系列的處理流程最終將 spring.factories 文件中的定義的各類 beans 裝載入 ApplicationContext容器。spring-boot

這一步搞定以後其實一個 Spring Boot Starter已經寫好了,接下來能夠經過 mvn:install打包,並傳到 私有/公有Maven倉庫以供使用了。


推送到遠端倉庫

不少公司都搭有私有的 Maven倉庫,但我的實驗能夠藉助於 JitPack這個 「遠端公服」來爲咱們託管自制的 Spring Boot Starter。

咱們將編寫好的 Spring Boot Starter代碼置於 Github公有倉庫上,而後經過 JitPack來拉取咱們的代碼並打包生成Jar包便可

推送到遠端倉庫


使用Spring Boot Starter

新建一個測試工程來測試一下咱們編寫的 md5test-spring-boot-starter。工程建立完畢後,在 pom.xml中加入以下兩個元素:

  • 添加 JitPack repository
<repositories>
	<repository>
		<id>jitpack.io</id>
		<url>https://jitpack.io</url>
	</repository>
</repositories>
複製代碼
  • 添加 md5test-spring-boot-starter依賴:
<dependency>
	<groupId>com.github.hansonwang99</groupId>
	<artifactId>md5test-spring-boot-starter</artifactId>
	<version>0.0.1</version>
</dependency>
複製代碼

再編寫一個測試 Controller來測一下MD5摘要算法的功能:

@RestController
public class TestController {

    @Autowired
    private MD5Service md5Service;

    @RequestMapping("/test")
    public String getMD5() {
        return "MD5加密結果爲:" + md5Service.getMD5("mypassword");
    }
}
複製代碼

調用 /test接口後的加密結果爲:

MD5加密結果爲:34819D7BEEABB9260A5C854BC85B3E44
複製代碼

後記

因爲能力有限,如有錯誤或者不當之處,還請你們批評指正,一塊兒學習交流!



長按掃描 下面的 當心心 來訂閱做者公衆號 CodeSheep,獲取更多 務實、能看懂、可復現的 原創文 ↓↓↓

CodeSheep · 程序羊
相關文章
相關標籤/搜索