遇到了一個 Spring Boot 3 整合 MyBatis 的問題,然后解決了,當然,這其實不是個大問題,只是自己編碼時遇到了,然后總結總結分享一下,如果有遇到類似問題的,可以參考一下,
交代一下背景

最近在熟悉 Spring Boot 3 版本的代碼,開發程序中遇到了一些小坑,不過很快都解決了,然后就用 Spring Boot 3 版本寫了幾個小 demo,比如 Web 開發、連接資料庫、使用 JdbcTemplate 操作資料庫,編碼和測驗都非常順利,雖然是從 Spring Boot 2.x 版本升級到 Spring Boot 3,但是沒有感覺到太多差別,
不過,在使用 Spring Boot 3 整合 MyBatis 時出現了一些問題,花了不少時間處理,
使用的版本如下所示,
- Spring Boot 版本配置
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.0-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
- MyBatis 版本配置
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
問題出現
啟動時直接報錯,內容如下圖所示,

當然,例外資訊挺多,比如無法創建 Bean 的例外等等,不過上面的幾個例外并不是問題主因,這里我直接定位到最后的例外上,例外資訊是:
Caused by: java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required
跟入發生例外的地方,代碼截圖如下:

問題原因也很明顯,sqlSessionTemplate 物件是空的,
問題排查
當然,由于把 Spring Boot 版本升級到 3 了,所以會覺得有很大的可能是版本升級導致了問題,
不過還是想自己查查問題,就依次檢查了代碼、資料庫配置、MyBatis 配置,都沒有發現哪里寫錯了,接著就沒頭緒了,之后又看了一下 MyBatis 自動配置的原始碼,通過 debug 模式看了下是不是有什么問題,在查看原始碼的程序中看到一個有意思的事情,SqlSessionFactoryBean 這個類直接報紅了,如下圖所示,

為什么說有意思呢?
正常情況下這個類肯定不會報錯的,再去查詢問題,發現 NestedIOException 這個類在 Spring 6 版本中直接洗掉了,對的,直接洗掉了,而 MyBatis 還沒有同步更新,所以直接就報紅了,
如果真的是版本升級導致的,還真就暫時沒法改,只能等 MyBatis 那邊也發布新版本才行,除了 MyBatis 之外,如果使用 Spring Boot 3 直接整合 MyBatis-Plus 這種框架,那肯定也會報錯的,
另外,不止是 MyBatis 框架會出問題,像 Spring 6 這種直接嘎掉一些類的情況,如果其它框架里用到了一些 Spring 框架中的類,恰好也被嘎了,那么,升級到 Spring6 或者 Spring Boot 3 時,都得注意一下,
解決問題:需要升級版本

好的,排查自己的代碼沒發現問題,只有去古狗上看看有沒有解決方案,搜了一圈,在 MyBatis 的開源倉庫里看到了一個類似問題,解決方案也有,如下圖所示,

對的,使用 Spring Boot 3 版本整合 MyBatis 時,需要把 mybatis-spring-boot-starter 也升級,mybatis-spring-boot-starter 2.x 版本暫時還不適配 Spring Boot 3 版本,沒轍,另外,由于還沒正式發版,所以需要配置一個遠程倉庫,
<dependencies>
<!-- 引入 3.0.0-SNAPSHOT 版本的 mybatis-spring-boot-starter(未正式發版) -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.0-SNAPSHOT</version>
</dependency>
</dependencies>
<repositories>
<!-- 由于未正式發版,所以在Maven倉庫里還搜不到,需要額外配置一個遠程倉庫 -->
<repository>
<id>ossrh</id>
<name>OSS Snapshot repository</name>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
總結
事情不大,本來不想單獨寫篇文章的,但是我有個預感,在專案中升級 Spring Boot 3 時還會有其它問題,不知道 Spring6 這次更新了多少東西,連 TM 的MyBatis、MyBatis-Plus 這種常用的框架都中招了,這些就慢慢整理吧,畢竟是大版本升級,難免會出現不兼容、等依賴更新的情況,確實沒轍,等更新唄,
如果這篇文章浪費了你的時間,先說聲抱歉,你直接關掉網頁就好,
因為維護了幾個 Spring Boot 的開源專案,Spring Boot 3 正式發版了,我也會及時更新版本、升級這幾個 Spring Boot 實戰專案,如果碰到了什么問題,也會及時分享出來,
| 專案名稱 | 描述 | GitHub倉庫地址 | Gitee倉庫地址 |
|---|---|---|---|
| newbee-mall | Spring Boot 開源電商實戰專案(含商城端和后臺管理系統) | https://github.com/newbee-ltd/newbee-mall | https://gitee.com/newbee-ltd/newbee-mall |

| 專案名稱 | 描述 | GitHub倉庫地址 | Gitee倉庫地址 |
|---|---|---|---|
| My-Blog | Spring Boot 開源博客實戰專案 | https://github.com/ZHENFENG13/My-Blog | https://gitee.com/ZHENFENG13/My-Blog |

我曾七次鄙視自己的靈魂:除注明轉載/出處外,皆為作者原創,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文鏈接,否則保留追究法律責任的權利,
第一次,當它本可進取時,卻故作謙卑;
第二次,當它空虛時,用愛欲來填充;
第三次,在困難和容易之間,它選擇了容易;
第四次,它犯了錯,卻借由別人也會犯錯來寬慰自己;
第五次,它自由軟弱,卻把它認為是生命的堅韌;
第六次,當它鄙夷一張丑惡的嘴臉時,卻不知那正是自己面具中的一副;
第七次,它側身于生活的污泥中雖不甘心,卻又畏首畏尾,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/538161.html
標籤:其他
