首頁>科技>

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

一、框架選型說明

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

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的版本。

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

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

三、框架搭建

1、創建SpringBoot項目

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

(3)選擇相應的依賴,選中Lombok、MyBatis、MySQL驅動、Redis、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的配置內容如下:

日誌的配置類文件logback-spring.xml內容如下:

3、代碼集成

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

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

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

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

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

(2)controller類詳細信息如下:

(3)service接口層

serviceImpl接口實現層

(4)dao層

(5)集成mybatis

剛開始創建Maven類型Springboot框架項目的時候,已經添加了Mybatis依賴,也可以手動在pom.xml中添加mybatis的jar依賴。以下是pom.xml文件中添加的所有依賴。

然後在resources下創建mybatis文件夾,編寫xml文件,主要就是SQL語句。

4、運行項目

啟動項目,配置啟動服務SpringBootDemoApplication

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

5、集成AOP

(1)pom.xml中已添加spring切面aop依賴

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-aop</artifactId>

</dependency>

(2) 創建日誌實體類

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

(4) 創建aop切面實現類

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

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

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

6、事務回滾

(1)、啟動類添加註解@EnableTransactionManagement 開啟事務支持。

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

如果想要對拋出的任何異常都進行自動回滾(而不是隻針對RuntimeException),需要在使用@Transactional(rollbackFor = Exception.class),並throw拋出。可參考上面添加AOP的例子中的手動事務回滾。

7、集成Junit

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

8、集成Redis

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

(2)Redis配置類

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

(4)redis 服務實現

9、集成Kafka

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

生產者服務:

消費者服務:

0
最新評論
  • 整治雙十一購物亂象,國家再次出手!該跟這些套路說再見了
  • 教育信息化2.0時代,高校網絡安全如何保障?