首頁 > 易卦

SpringBoot+Mybatis+Redis+MySQL+Kafka完整地搭建一個專案

作者:由 程式設計俠 發表于 易卦日期:2023-01-24

怎麼判斷幾號是星期幾

在之前的文章中已經陸陸續續講解了Java開發的一些基礎知識,今天來整合這些知識,從無到有完整地搭建一個小型專案,把所講解的內容逐一融合進去。技術選型是Spring+SpringBoot+Mybatis+MySQL+Maven+Redis+Kafka+Zookeeper+Junit。

SpringBoot+Mybatis+Redis+MySQL+Kafka完整地搭建一個專案

一、框架選型說明

先簡單的闡述一下我選擇這套框架的原因:

1、總體框架是SSM,即Spring+SpringBoot+Mybatis,Springboot是一個微服務框架,延續了spring框架的核心思想IOC和AOP,簡化了應用的開發和部署。再搭配Mybatis,簡單易上手,目前又有很多的外掛來實現自動生成程式碼,解決了程式碼繁瑣的問題,更多的只關注於核心業務。

2、資料庫使用MySQL開源資料庫,比較適合個人開發,部署起來也比較容易,前面已經介紹了使用docker-compose可以快速的搭建mysql服務,安裝部署參考《

docker-compose安裝mySQL及常見問題解答

》。

3、快取資料庫使用Redis,可以由淺到深,從單機版的redis再到叢集版的redis,不斷地加強個人對redis的理解和掌握,不管是windows還linux,不管是單節點還是叢集,小編都有接觸和實戰過,最終還是傾向於使用docker-compose進行部署安裝,配置簡單操作方便,可以參考《

docker-compose安裝redis哨兵叢集

4、使用maven作為依賴,來快速的引入jar包進行開發,自動構建部署,參考之前詳細的描述《

Maven專案管理工具的介紹和使用

5、整合junit單元測試框架,用於編寫和執行可重複的測試,方便除錯,參考《

SpringBoot框架整合JUnit單元測試

6、服務通訊,使用訊息佇列MQ,這裡使用Kafka,跟redis類似,我們從單機版再到叢集版學習逐漸提升拔高,3。0版本目前還不是特別成熟,因此我們使用2。0版本,需要搭配Zookeeper一起使用,使用zookeeper來儲存Kafka的元資料、監控Broker和分割槽的存活狀態,並利用ZooKeeper來進行選舉,參考《

docker-compose部署Kafka

本次搭建的是一個比較簡單的獨立小專案,因此暫時不考慮叢集和多服務的場景,如果服務較多的話,建議使用註冊中心統一管理,可以使用dubbo+zookeeper,再配合haproxy或者nginx,這些之前已有講解,可以參考一下《docker-compose安裝haproxy》和《Nginx的安裝部署,並使用工具線上自動生成配置檔案》

二、開發工具和版本

小編使用的是市場上比較通用的一些開發工具,這個按照個人習慣和熟練度,僅作為參考:

1、程式碼開發工具,使用 IntelliJ IDEA。

2、MySQL使用5。7版本或者8。0版本均可,這兩個版本有一定差異。根據官方說法,MySQL 8 要比 MySQL 5。7 快 2 倍,我這裡主要搭建框架,暫不論證效能問題。客戶端使用navicat 作為視覺化工具,方便執行增刪改查。可以使用 select version();命名檢視MySQL的版本。

SpringBoot+Mybatis+Redis+MySQL+Kafka完整地搭建一個專案

3、jdk 使用使用jdk 8 或者 jdk 11。這兩個版本都是穩定版本。可以使用 java -version (或者javac -version)命令檢視版本。

SpringBoot+Mybatis+Redis+MySQL+Kafka完整地搭建一個專案

4、redis 客戶端可以使用Redis Desktop

SpringBoot+Mybatis+Redis+MySQL+Kafka完整地搭建一個專案

三、框架搭建

1、建立SpringBoot專案

(1)首先開啟 IntelliJ IDEA 編輯器建立專案,選擇File ->New ->Project,選擇 Spring Initializr,選擇jdk版本,點選Next。

SpringBoot+Mybatis+Redis+MySQL+Kafka完整地搭建一個專案

(2)配置專案資訊,Artifact為專案名稱 ,group為專案組名,language設定為java ,packaging為打包方式(可選擇Jar或者War),注意Type選擇Maven Project(我們搭建的是Maven專案)。

SpringBoot+Mybatis+Redis+MySQL+Kafka完整地搭建一個專案

(3)選擇相應的依賴,選中Lombok、MyBatis、MySQL驅動、Redis、Kafka,當然也可以自己匯入,注意預設匯入的可能存在版本不匹配的問題,不太推薦這話種方式引入依賴。

SpringBoot+Mybatis+Redis+MySQL+Kafka完整地搭建一個專案

(4)輸入專案名稱,建立完成,點選Finish

SpringBoot+Mybatis+Redis+MySQL+Kafka完整地搭建一個專案

2、專案配置

專案剛開始搭建完成時,只有一個配置檔案application。properties,並且這個配置檔案一開始是沒有任何內容的,我們把需要的配置加上去,配置檔案可以是application。properties格式,也可以是application。yml格式,小編更傾向於application。yml格式,層次更清晰。

專案配置主要包含以下幾個方面的內容:

(1)專案的名稱、上下文、埠號;

(2)MySQL資料庫連線的型別、地址、埠號,以及使用者名稱和密碼;

(3)快取redis資料庫連線的ip、埠,密碼等,注意redis的單機版和叢集版配置差異較大;

(4)日誌檔案的配置,需要單獨配置一個日誌的配置類檔案logback-spring。xml

(5)mybatis的配置

(6)kafka訊息佇列的配置

綜上,application。yml的配置內容如下:

SpringBoot+Mybatis+Redis+MySQL+Kafka完整地搭建一個專案

日誌的配置類檔案logback-spring。xml內容如下:

SpringBoot+Mybatis+Redis+MySQL+Kafka完整地搭建一個專案

3、程式碼整合

編寫程式碼時,我們往往按照entity->Controller->Service/ServiceImpl->Dao->Xml這樣的層次來編寫業務模組,其他的還會涉及配置模組Config以及工具類Util。

SpringBoot+Mybatis+Redis+MySQL+Kafka完整地搭建一個專案

整體結構如下,逐一在過程中根據提示引入maven倉庫的jar包:

SpringBoot+Mybatis+Redis+MySQL+Kafka完整地搭建一個專案

接下來我們注意看下每個模組的配置:

(1)啟動類SpringBootDemoApplication(命名沒有特殊要求)

我們要在外層(相對於config、controller這些資料夾來說的,就是跟controller包同級)寫個啟動類SpringBootStart。啟動main方法,為什麼要在controller包同級的地方寫個啟動類SpringBootStart,這是為了讓SpringBootStart處於最外層,這樣他能夠讀取到Controller裡面所有的配置檔案,當然啦,你也可以在controller下面去寫啟動方法,不過這樣不利於後面測試,因為你每寫一個controller都需要改SpringBootStart方法

SpringBoot+Mybatis+Redis+MySQL+Kafka完整地搭建一個專案

(2)controller類詳細資訊如下:

SpringBoot+Mybatis+Redis+MySQL+Kafka完整地搭建一個專案

(3)service介面層

SpringBoot+Mybatis+Redis+MySQL+Kafka完整地搭建一個專案

serviceImpl介面實現層

SpringBoot+Mybatis+Redis+MySQL+Kafka完整地搭建一個專案

(4)dao層

SpringBoot+Mybatis+Redis+MySQL+Kafka完整地搭建一個專案

(5)整合mybatis

剛開始建立Maven型別Springboot框架專案的時候,已經添加了Mybatis依賴,也可以手動在pom。xml中新增mybatis的jar依賴。以下是pom。xml檔案中新增的所有依賴。

SpringBoot+Mybatis+Redis+MySQL+Kafka完整地搭建一個專案

然後在resources下建立mybatis資料夾,編寫xml檔案,主要就是SQL語句。

SpringBoot+Mybatis+Redis+MySQL+Kafka完整地搭建一個專案

4、執行專案

啟動專案,配置啟動服務SpringBootDemoApplication

SpringBoot+Mybatis+Redis+MySQL+Kafka完整地搭建一個專案

使用右側的maven快捷進行清理、編譯和打包,本地執行時先不用打包,執行後控制檯會列印相關日誌。

SpringBoot+Mybatis+Redis+MySQL+Kafka完整地搭建一個專案

5、整合AOP

(1)pom。xml中已新增spring切面aop依賴

org。springframework。boot

spring-boot-starter-aop

(2) 建立日誌實體類

SpringBoot+Mybatis+Redis+MySQL+Kafka完整地搭建一個專案

(3) 使用spring 的 aop 技術切到自定義註解上,所以先建立一個自定義註解類

SpringBoot+Mybatis+Redis+MySQL+Kafka完整地搭建一個專案

(4) 建立aop切面實現類

SpringBoot+Mybatis+Redis+MySQL+Kafka完整地搭建一個專案

寫入日誌表,需要編寫SysLogService和dao層以及xml層,這個跟其他業務的寫法類似,這裡不做贅述。

(5) 在需要監控的方法上新增 aop的自定義註解

格式為 @+自定義註解的類名 例如:@MyLog

SpringBoot+Mybatis+Redis+MySQL+Kafka完整地搭建一個專案

6、事務回滾

(1)、啟動類添加註解@EnableTransactionManagement

開啟事務支援。

(2)、在方法上添加註解

@Transactional

如果想要對丟擲的任何異常都進行自動回滾(而不是隻針對RuntimeException),需要在使用

@Transactional(rollbackFor = Exception.class),並throw丟擲。可參考上面新增AOP的例子中的手動事務回滾。

7、整合Junit

在test目錄下,編寫Junit測試類,需要在maven引入junit依賴包,示例如下:

SpringBoot+Mybatis+Redis+MySQL+Kafka完整地搭建一個專案

8、整合Redis

(1)首先編寫redis靜態變數配置類(基於我使用的Redis哨兵叢集),後面需要用到這裡的引數。

SpringBoot+Mybatis+Redis+MySQL+Kafka完整地搭建一個專案

(2)Redis配置類

SpringBoot+Mybatis+Redis+MySQL+Kafka完整地搭建一個專案

(3)redis 帶有分片的哨兵連線池

SpringBoot+Mybatis+Redis+MySQL+Kafka完整地搭建一個專案

(4)redis 服務實現

SpringBoot+Mybatis+Redis+MySQL+Kafka完整地搭建一個專案

9、整合Kafka

主要是Kafka生產者和消費者,配置如下:

SpringBoot+Mybatis+Redis+MySQL+Kafka完整地搭建一個專案

生產者服務:

SpringBoot+Mybatis+Redis+MySQL+Kafka完整地搭建一個專案

消費者服務:

SpringBoot+Mybatis+Redis+MySQL+Kafka完整地搭建一個專案