SpringBoot2.1版本的個人應用開發框架 - 從0-1搭建個人框架

人生長恨水發表於2019-04-11

前言

一直以來寫程式碼都是在別人寫好的框架上寫程式碼,其實我一直想自己搭一個框架試一試,正好有機會,我就試著自己搭一下,搭的好與壞我覺得不重要,重要的是在這次搭框架的過程中,一定能學習到很多東西。在這裡我借鑑了網上很多大神的部落格,主要參考的還是下面連結的博主部落格,第一次搭建也許在大局觀以及知識和經驗的儲備不足,如有什麼錯誤的地方,望即時糾正,專案採用springboot多模組結構。

專案地址:SpringBoot2.1版本的個人應用開發框架

主要參考:基於SpringBoot搭建應用開發框架

springboot基礎學習:springboot學習目錄

建立Springboot基礎結構

左側選擇Spring Initializr 後選擇jdk的版本,我這裡用的是jdk1.8版本

新建專案01

根據自己的命名規範設定Group和Artifact,並選擇Type型別為Maven POM

pom

選擇依賴那不選擇任何依賴直接下一步,直到定義專案的名稱,以及專案儲存的地方,點選finish完成本次建立,記得選擇本專案的儲存位置,最終專案的結構如此。

20190409161436

父pom檔案中標籤中的jar要改成pom,一定要修改,否則各個模組之間無法傳遞依賴

<groupId>com.ywh</groupId>
<artifactId>springcloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 父pom.xml中的必須為pom型別 便於子模組之間傳遞依賴 -->
<packaging>pom</packaging>
複製程式碼

建立Module(子模組)

在根據參考的部落格和網上一些部落格。分模組有很多種分法,大多數是根據controller、service、dao等等分模組的,這種的分法我認為分的太細了,這種的我覺得適用於大公司,人多的那種,每個人負責一個模組進行開發,出了錯誤也可以快速定位,並且有具體的人負責修改就可以了(也有可能是我的認知太淺薄,理解錯了)。

我暫時主要分為:

  • ywh-starter-core —— 用來放自己寫的業務程式碼
  • ywh-starter-cache —— 用來放專案快取
  • ywh-starter-security —— 用來做許可權認證
  • ywh-starter-common —— 放一些工具類,以及一些基礎的常量、變數、列舉類等

在專案上右鍵>New>Module,首先建立core子模組

建立子模組

Group

建立Module也是springboot專案,不過在選擇專案儲存的時候一定要在本專案中新建一個檔案來儲存我們的子模組,這樣才不會模組的結構跑到我們的外面來,如下圖

儲存子模組

按著以上方式建立ywh-starter-core,ywh-starter-cache,ywh-starter-common,ywh-starter-security等模組,建立所有模組以後的專案結構如下:

專案總體結構

修改專案通用配置

專案建立好以後我們對專案的所有pom.xml檔案修改一下,首先是子模組pom.xml中繼承父專案並且把spring-boot-starterspring-boot-starter-test依賴刪除即可,因為我們會在父pom.xml中新增web依賴和test依賴,子模組繼承以後會使用父pom.xml的依賴,子模組以core為例子,其他按著core修改即可,其次是父pom.xml中新增子模組的配置,父pom就是上圖中最外側的pom檔案

<!-- 繼承父專案 -->
<parent>
	<groupId>com.ywh</groupId>
	<artifactId>springcloud</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<relativePath>../pom.xml</relativePath> <!-- lookup parent from repository -->
</parent>
複製程式碼
<!-- 子模組 -->
<modules>
	<module>ywh-starter-cache</module>   <!-- 快取子模組 -->
	<module>ywh-starter-common</module>   <!-- 工具模組 -->
	<module>ywh-starter-core</module>   <!-- 寫程式碼的子模組 -->
	<module>ywh-starter-security</module>  <!-- 許可權子模組 -->
</modules>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
</properties>
複製程式碼

確定模組之間的依賴關係

子模組之間也是有依賴關係的,否則在core中是無法呼叫其他模組中的東西的,所以我這裡的依賴關係是core->security->cache->common,這裡的依賴關係先暫時定下,以後有變化時可以再進行確定修改,一定要注意不要迴圈依賴,以core為例,修改pom.xml如下:

<dependency>
    <groupId>com.ywh</groupId>
    <artifactId>security</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- 按照上面的所屬依賴關係 修改每一個子模組的pom.xml -->
複製程式碼

在父pom.xml中引入一些我們公用的依賴分別如下,關於什麼依賴可以放在父pom.xml下什麼可以放在其他子模組下,我是這麼理解的,當一個依賴有兩個以上的子模組使用的時候,就要把這個依賴提出來放到父pom下,這個依賴只有這一個子模組使用,就可以單獨放在某一個子模組下。當然了為了圖方便可以把所有的依賴都放在父pom.xml中。

引入公共依賴

在父pom檔案中引入一些公用依賴

<!-- web依賴 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
 
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
 
<!-- 引入fastjson依賴包 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.53</version>
</dependency>
 
<!-- io流的依賴 擁有快速讀寫,檔案目錄拷貝與刪除等等,io的操作   目錄與檔案的監聽等功能 -->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
</dependency>
 
<!-- 對檔案上傳 下載的依賴 -->
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.3</version>
</dependency>
 
<!-- 提供了豐富的集合操作 -->
<dependency>
    <groupId>commons-collections</groupId>
    <artifactId>commons-collections</artifactId>
    <version>3.2.1</version>
</dependency>
 
<!-- 提供了基本編碼解碼演算法,如base64,md5,sha等 -->
<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.11</version>
</dependency>
 
<!-- 豐富的工具類 如StringUtils -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.8.1</version>
</dependency>
 
<!-- 連線池 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
    <version>2.6.0</version>
</dependency>
複製程式碼

建立yml檔案並修改banner圖

Spring Boot使用一個全域性的配置檔案application.properties或application.yml,放置在src/main/resources目錄下。我們可以在這個全域性配置檔案中對一些預設的配置值進行修改,把所有的application.properties的字尾名修改成.yml,這個不是必須的,如果習慣.properties的方式也可以不修改,是一樣的,具體有哪些配置可到官網查詢,有非常多的配置,不過大部分使用預設即可。 具體有哪些配置可到官網查詢,有非常多的配置,不過大部分使用預設即可 SpringBoot官方配置檔案參考

我增加了開發環境(dev)和生產環境(prod)的配置檔案,並通過在application.yml中設定spring.profiles.active=dev來指定當前環境,yml檔案必須以application開頭接 -*。

yml檔案

替換springboot專案啟動時控制檯顯示的banner圖,生成banner圖這個網站生成一個自己專案的banner。建立banner.txt並放到resources根目錄下,我是以core啟動專案的,所以我放到了core的子模組下,啟動以後就能看到修改後的banner圖了。

banner圖

修改啟動類CoreApplication,掃描配為com.ywh,如果不增加,在其他的模組中新增的配置類會導致掃描不到的情況

@SpringBootApplication(scanBasePackages = "com.ywh")
複製程式碼

整合Druid + Mybatis-Plus

實現基礎controller、service、前端封裝返回json體等

日誌自定義和全域性異常處理

整合Redis快取

整合SpringSecurity

整合vue實現前後端分離

使用docker打包部署

相關文章