前不僅,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
版本開始預設禁用了迴圈依賴,如果你的專案中迴圈依賴太多的話,只能使用如下配置開啟了。
spring:
main:
allow-circular-references: true
既然官方都禁止使用了,我們還是從源頭上解決迴圈依賴的好,如何優雅地解決迴圈依賴問題具體可以參考mall-tiny升級支援SpringBoot 2.7.0 中的解決迴圈依賴部分,mall專案也使用了這種優雅的方式。
Swagger改用Starter
之前專案中是直接使用Swagger依賴來整合的,並沒有用Starter
,這次改用了它。
<!--Swagger-UI API文件生產工具-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
在升級SpringBoot 2.6.x
版本的時候,其實Swagger就有一定的相容性問題,需要在配置中新增BeanPostProcessor
這個Bean,具體可以參考升級 SpringBoot 2.6.x 版本後,Swagger 沒法用了 。
SpringSecurity用法升級
在升級SpringBoot2.7.0
版本後,SpringSecurity中有個重要的類被棄用了,那就是一直作為配置類使用的WebSecurityConfigurerAdapter
。
新用法非常簡單,無需再繼承WebSecurityConfigurerAdapter
,只需直接宣告配置類,再配置一個生成SecurityFilterChainBean
的方法,把原來的HttpSecurity
配置移動到該方法中即可,mall專案也採用了這種新用法。
/**
* 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
。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version>
</dependency>
之前有小夥伴提出升級到該版本後,在Linux上無法連線到MySQL資料庫,其實是因為預設使用了SSL連線導致的,在配置檔案中新增useSSL=false
配置即可解決。
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/ma...
- mall在Linux環境下的部署(基於Docker容器)
https://www.macrozheng.com/ma...
- mall在Linux環境下的部署(基於Docker Compose)
https://www.macrozheng.com/ma...
總結
今天分享了一下mall專案的升級內容和升級過程中遇到的一些問題,不得不說,SpringBoot確實是個很棒的框架,跨了幾個大版本升級到2.7.0
,程式碼幾乎無需改動。SpringBoot 2.7 版本很可能成為一個釘子戶版本,因為從SpringBoot 3.0 開始最低要求Java 17了,大家可以嘗試下升級到該版本!
專案原始碼地址
開源不易,覺得專案有幫助的小夥伴點個Star
支援下吧!