Mall電商實戰專案全面升級!支援最新版SpringBoot,徹底解決迴圈依賴...
前不僅,SpringBoot 2.7.0 版本釋出了,我也是第一時間把之前開源的腳手架專案mall-tiny 給升級支援了!有的小夥伴提出把mall專案也升級下,於是我最近抽空把它給升級了!不僅是支援了最新版SpringBoot,使用到的技術棧基本都升級到最新了!今天分享下升級內容和升級過程中遇到的一些問題,大家可以參考下!
SpringBoot實戰電商專案mall(50k+star)地址:https://github.com/macrozheng/mall
技術棧升級
mall專案採用現階主流技術實現,這些主流技術基本都升級了目前最新穩定版,具體升級內容大家可以參考下表。
| 技術 | 版本 | 說明 | | ------------------------ | ---------------- | --------------------- | | SpringBoot | 2.3.0->2.7.0 | 容器+MVC框架 | | SpringSecurity | 5.1.4->5.7.1 | 認證和授權框架 | | MyBatis | 3.4.6->3.5.9 | ORM框架 | | MyBatisGenerator | 1.3.3->1.4.1 | 資料層程式碼生成 | | RabbitMQ | 3.7.14->3.10.5 | 訊息佇列 | | Redis | 5.0->7.0 | 分散式快取 | | MongoDB | 4.2.5->5.0 | NoSql資料庫 | | Elasticsearch | 7.6.2->7.17.3 | 搜尋引擎 | | LogStash | 7.6.2->7.17.3 | 日誌收集工具 | | Kibana | 7.6.2->7.17.3 | 日誌視覺化檢視工具 | | Nginx | 1.10->1.22 | 靜態資源伺服器 | | Druid | 1.1.10->1.2.9 | 資料庫連線池 | | MinIO | 7.1.0->8.4.1 | 物件儲存 | | Hutool | 5.4.0->5.8.0 | Java工具類庫 | | PageHelper | 5.2.0->5.3.0 | MyBatis物理分頁外掛 | | Swagger-UI | 2.9.2->3.0.0 | 文件生成工具 | | logstash-logback-encoder | 5.3->7.2 | Logstash日誌收集外掛 | | docker-maven-plugin | spotify->fabric8 | 應用打包成Docker映象的Maven外掛 |
升級過程
升級過程中遇到一些問題,這裡整理了下,給想要升級這套技術棧的小夥伴一個參考!
支援SpringBoot 2.7.0
看了下之前使用的2.3.0
版本,一年前就End of Support
了,升級2.7.0
還是很有必要的。
升級2.7.0
版本不僅是改個版本號就行了,由於SpringBoot2.6.x
版本開始預設禁用了迴圈依賴,如果你的專案中迴圈依賴太多的話,只能使用如下配置開啟了。
yaml
spring:
main:
allow-circular-references: true
既然官方都禁止使用了,我們還是從源頭上解決迴圈依賴的好,如何優雅地解決迴圈依賴問題具體可以參考mall-tiny升級支援SpringBoot 2.7.0 中的解決迴圈依賴部分,mall專案也使用了這種優雅的方式。
Swagger改用Starter
之前專案中是直接使用Swagger依賴來整合的,並沒有用Starter
,這次改用了它。
```xml
在升級SpringBoot 2.6.x
版本的時候,其實Swagger就有一定的相容性問題,需要在配置中新增BeanPostProcessor
這個Bean,具體可以參考升級 SpringBoot 2.6.x 版本後,Swagger 沒法用了 。
SpringSecurity用法升級
在升級SpringBoot2.7.0
版本後,SpringSecurity中有個重要的類被棄用了,那就是一直作為配置類使用的WebSecurityConfigurerAdapter
。
新用法非常簡單,無需再繼承WebSecurityConfigurerAdapter
,只需直接宣告配置類,再配置一個生成SecurityFilterChainBean
的方法,把原來的HttpSecurity
配置移動到該方法中即可,mall專案也採用了這種新用法。
```java /* * SpringSecurity 5.4.x以上新用法配置 * 為避免迴圈依賴,僅用於配置HttpSecurity * Created by macro on 2022/5/19. / @Configuration public class SecurityConfig {
@Bean SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception { //省略HttpSecurity的配置 return httpSecurity.build(); }
} ```
最新版Spring Security用法具體可以參考Spring Security 最新用法 。
MyBatis升級
在升級MyBatis的過程中,也升級了MySQL的驅動版本,從8.0.16
升級到了8.0.29
。
xml
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version>
</dependency>
之前有小夥伴提出升級到該版本後,在Linux上無法連線到MySQL資料庫,其實是因為預設使用了SSL連線導致的,在配置檔案中新增useSSL=false
配置即可解決。
yaml
spring:
datasource:
url: jdbc:mysql://db:3306/mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false
username: reader
password: 123456
ELK日誌收集系統升級
其實每次升級SpringBoot版本,如果集成了Elasticsearch都基本要升級ES,然後整套ELK元件都得升級,這次全部升級到了7.17.3
版本。
為什麼升級該版本呢?因為SpringBoot2.7.0
使用的Java SDK預設相容該版本。
不得不說ES的Java SDK各版本相容性很差,如果還是使用之前的7.6.2
版本的話,執行mall-search
中的單元測試程式碼會出現如下問題。很多小夥伴使用ES出現一些稀奇古怪的問題,大概率是版本相容性問題。
看一眼升級後的日誌收集系統,Kibana的介面更現代化了!
MongoDB升級
MongoDB升級5.0
用法基本和之前一致,但是在部署到Docker環境時發現,MongoDB5.0
居然需要特定CPU支援,只得改用4.x
版本了。
映象打包外掛改用fabric8io
之前一直使用的是spotify
出品的docker-maven-plugin
,用於打包應用Docker映象並上傳到伺服器。上了下官網,這個外掛基本上是不維護了,之前也有小夥伴反饋使用有問題。
現在改用了fabric8
出品的docker-maven-plugin
,功能更強大,更新也比較及時。
雖然外掛換了,但用法還是一樣的,配置好docker遠端訪問地址後直接雙擊package
命令就可以實現一鍵打包上傳應用映象了。
部署文件更新
專案的部署文件也同步更新了,具體可以參考以下連結。
- mall在Windows環境下的部署
https://www.macrozheng.com/mall/deploy/mall_deploy_windows.html
- mall在Linux環境下的部署(基於Docker容器)
https://www.macrozheng.com/mall/deploy/mall_deploy_docker.html
- mall在Linux環境下的部署(基於Docker Compose)
https://www.macrozheng.com/mall/deploy/mall_deploy_docker_compose.html
總結
今天分享了一下mall專案的升級內容和升級過程中遇到的一些問題,不得不說,SpringBoot確實是個很棒的框架,跨了幾個大版本升級到2.7.0
,程式碼幾乎無需改動。SpringBoot 2.7 版本很可能成為一個釘子戶版本,因為從SpringBoot 3.0 開始最低要求Java 17了,大家可以嘗試下升級到該版本!
專案原始碼地址
開源不易,覺得專案有幫助的小夥伴點個
Star
支援下吧!
https://github.com/macrozheng/mall
- 還在用HttpUtil?SpringBoot 3.0全新HTTP客戶端工具來了,用起來夠優雅!
- Markdown還能這麼玩?這款開源神器絕了!
- MyBatis這樣用,同事直呼哇塞,堪稱最佳實踐!
- MyBatis-Plus同款Elasticsearch ORM框架,用起來夠優雅!
- 告別if else!試試這款輕量級流程引擎吧,自帶IDEA外掛真香!
- 堪稱一站式管理平臺,同時支援Linux、MySQL、Redis、MongoDB視覺化管理!
- 5分鐘自建資料庫視覺化平臺,線上管理資料庫也太方便了!
- 我上線了一個炫酷的專案實戰教程網站,主流技術一網打盡!
- 10 款更先進的開源命令列工具,太炫酷了!
- 看了我常用的IDEA外掛,同事也開始悄悄安裝了...
- 推薦一款微軟出品的開發神器,體驗不輸IDEA!
- 老版本Typora強制付費!試試這款開源替代品!
- 僅需一個依賴給Swagger換上新面板,既簡單又炫酷!
- 支援Nacos 2.1.0!這套Spring Cloud Gateway Oauth2 微服務許可權終極解決方案升級了!
- 還在用命令列看日誌?快用Kibana吧,視覺化日誌分析YYDS!
- Mall電商實戰專案全面升級!支援最新版SpringBoot,徹底解決迴圈依賴...
- 阿里出品!SpringBoot應用自動化部署神器,IDEA版Jenkins?
- 再見命令列!一鍵部署應用到遠端伺服器,IDEA官方Docker外掛真香!
- 還在用Navicat?這款開源的資料庫管理工具介面更炫酷!
- 還在從零開始搭建專案?這款升級版快速開發腳手架值得一試!