前言
一直以來寫程式碼都是在別人寫好的框架上寫程式碼,其實我一直想自己搭一個框架試一試,正好有機會,我就試著自己搭一下,搭的好與壞我覺得不重要,重要的是在這次搭框架的過程中,一定能學習到很多東西。在這裡我借鑑了網上很多大神的部落格,主要參考的還是下面連結的博主部落格,第一次搭建也許在大局觀以及知識和經驗的儲備不足,如有什麼錯誤的地方,望即時糾正,專案採用springboot多模組結構。
後端專案地址:SpringBoot2.1版本的個人應用開發框架
前端專案地址:ywh-vue-admin
主要參考:基於SpringBoot搭建應用開發框架
springboot基礎學習:springboot學習目錄
建立Springboot基礎結構
左側選擇Spring Initializr 後選擇jdk的版本,我這裡用的是jdk1.8版本
根據自己的命名規範設定Group和Artifact,並選擇Type型別為Maven POM
選擇依賴那不選擇任何依賴直接下一步,直到定義專案的名稱,以及專案儲存的地方,點選finish完成本次建立,記得選擇本專案的儲存位置,最終專案的結構如此。
父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子模組
建立Module也是springboot專案,不過在選擇專案儲存的時候一定要在本專案中新建一個檔案來儲存我們的子模組,這樣才不會模組的結構跑到我們的外面來,如下圖
按著以上方式建立ywh-starter-core,ywh-starter-cache,ywh-starter-common,ywh-starter-security等模組,建立所有模組以後的專案結構如下:
修改專案通用配置
專案建立好以後我們對專案的所有pom.xml檔案修改一下,首先是子模組pom.xml中繼承父專案並且把spring-boot-starter和spring-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->security,security->core,這樣就會導致迴圈依賴),以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開頭接 -*。
替換springboot專案啟動時控制檯顯示的banner圖,生成banner圖這個網站生成一個自己專案的banner。建立banner.txt並放到resources根目錄下,我是以core啟動專案的,所以我放到了core的子模組下,啟動以後就能看到修改後的banner圖了。
修改啟動類CoreApplication,掃描配為com.ywh,如果不增加,在其他的模組中新增的配置類會導致掃描不到的情況
@SpringBootApplication(scanBasePackages = "com.ywh")
複製程式碼
整合Druid + Mybatis-Plus
實現基礎controller、service、前端封裝返回json體等
日誌自定義和全域性異常處理
整合Redis快取
整合SpringSecurity
- 連結:SpringBoot2.1版本的個人應用開發框架 - 使用SpringSecurity管理我們的訪問許可權1
- 連結:SpringBoot2.1版本的個人應用開發框架 - 使用SpringSecurity管理我們的訪問許可權2
整合vue實現前後端分離
使用docker + Nginx打包部署
結語
這一篇筆記終於寫完了,從專案的建立到部署的流程全部走了一遍,實現了從0-1,我知道這裡的問題還有很多;在搭建這個框架之間解決了以前有的疑問,但是又多了些新的疑問,這都需要之後的學習來解答,成功不是一蹴而就,要慢慢來;我還想把這個框架豐富一下,修改成微服務的架構,下一階段學習
- springcloud和dubbo
- redis進階
- nginx的系統學習
- es搜尋引擎
- 訊息佇列
等等吧,一些中介軟體的學習
回看我前幾章的筆記,其實還比較墨跡的,而且程式碼還不優雅(因為理解的還是不夠透徹吧),什麼叫做優雅,在我看來就是沒有多餘的操作,簡單明瞭,不會把一件事情弄得很複雜,這一點還需要很大的努力,其實呢在我寫這些筆記的時候,我的想法就是,一是給自己記筆記,以後回看的時候有一個記憶點,二呢就是給像我一樣迷茫不知道該學什麼的提供一種思路,畢竟我這個所謂的個人框架只是把一些東西放在一起了,有點東北亂燉的感覺,但是最起碼可以當一個參考,這裡面用到的東西還是值得一學的。
我覺得作為一個年輕人,要不斷的充實自己的知識,只有學的更多,做東西的時候才能思考的更多,解決的辦法也就更多。
我喜歡程式設計,程式設計讓我有成就感,讓我有學下去的動力。