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

前言

一直以來寫代碼都是在別人寫好的框架上寫代碼,其實我一直想本身搭一個框架試一試,正好有機會,我就試着本身搭一下,搭的好與壞我以爲不重要,重要的是在此次搭框架的過程當中,必定能學習到不少東西。在這裏我借鑑了網上不少大神的博客,主要參考的仍是下面連接的博主博客,第一次搭建也許在大局觀以及知識和經驗的儲備不足,若有什麼錯誤的地方,望即時糾正,項目採用springboot多模塊結構。html

後端項目地址:SpringBoot2.1版本的我的應用開發框架前端

前端項目地址:ywh-vue-adminvue

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

springboot基礎學習:springboot學習目錄nginx

建立Springboot基礎結構

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

新建項目01

根據本身的命名規範設置Group和Artifact,並選擇Type類型爲Maven POMgithub

pom

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

20190409161436

父pom文件中標籤中的jar要改爲pom,必定要修改,不然各個模塊之間沒法傳遞依賴redis

<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->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開頭接 -*。

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 + Nginx打包部署

結語

這一篇筆記終於寫完了,從項目的建立到部署的流程所有走了一遍,實現了從0-1,我知道這裏的問題還有不少;在搭建這個框架之間解決了之前有的疑問,可是又多了些新的疑問,這都須要以後的學習來解答,成功不是一蹴而就,要慢慢來;我還想把這個框架豐富一下,修改爲微服務的架構,下一階段學習

  • springcloud和dubbo
  • redis進階
  • nginx的系統學習
  • es搜索引擎
  • 消息隊列

等等吧,一些中間件的學習

回看我前幾章的筆記,其實還比較墨跡的,並且代碼還不優雅(由於理解的仍是不夠透徹吧),什麼叫作優雅,在我看來就是沒有多餘的操做,簡單明瞭,不會把一件事情弄得很複雜,這一點還須要很大的努力,其實呢在我寫這些筆記的時候,個人想法就是,一是給本身記筆記,之後回看的時候有一個記憶點,二呢就是給像我同樣迷茫不知道該學什麼的提供一種思路,畢竟我這個所謂的我的框架只是把一些東西放在一塊兒了,有點東北亂燉的感受,可是最起碼能夠當一個參考,這裏面用到的東西仍是值得一學的。

我以爲做爲一個年輕人,要不斷的充實本身的知識,只有學的更多,作東西的時候才能思考的更多,解決的辦法也就更多。

我喜歡編程,編程讓我有成就感,讓我有學下去的動力。

相關文章
相關標籤/搜索