SpringBoot3整合MyBatis出現(xiàn)異常:Property?'sqlSessionFactory'or?'sqlSessionTemplate'?are?required
SpringBoot3整合MyBatis報(bào)錯(cuò):Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are required
遇到了一個(gè) Spring Boot 3 整合 MyBatis 的問題,然后解決了。當(dāng)然,這其實(shí)不是個(gè)大問題,只是自己編碼時(shí)遇到了,然后總結(jié)總結(jié)分享一下。如果有遇到類似問題的,可以參考一下。
交代一下背景
最近在熟悉 Spring Boot 3 版本的代碼,開發(fā)過程中遇到了一些小坑,不過很快都解決了。然后就用 Spring Boot 3 版本寫了幾個(gè)小 demo,比如 Web 開發(fā)、連接數(shù)據(jù)庫(kù)、使用 JdbcTemplate 操作數(shù)據(jù)庫(kù),編碼和測(cè)試都非常順利,雖然是從 Spring Boot 2.x 版本升級(jí)到 Spring Boot 3,但是沒有感覺到太多差別。
不過,在使用 Spring Boot 3 整合 MyBatis 時(shí)出現(xiàn)了一些問題,花了不少時(shí)間處理。
使用的版本如下所示。
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> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.2</version> </dependency>
問題出現(xiàn)
啟動(dòng)時(shí)直接報(bào)錯(cuò),內(nèi)容如下圖所示。
當(dāng)然,異常信息挺多,比如無法創(chuàng)建 Bean 的異常等等,不過上面的幾個(gè)異常并不是問題主因。這里我直接定位到最后的異常上,異常信息是:
Caused by: java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required
跟入發(fā)生異常的地方,代碼截圖如下:
問題原因也很明顯,sqlSessionTemplate 對(duì)象是空的。
問題排查
當(dāng)然,由于把 Spring Boot 版本升級(jí)到 3 了,所以會(huì)覺得有很大的可能是版本升級(jí)導(dǎo)致了問題。
不過還是想自己查查問題,就依次檢查了代碼、數(shù)據(jù)庫(kù)配置、MyBatis 配置,都沒有發(fā)現(xiàn)哪里寫錯(cuò)了,接著就沒頭緒了。之后又看了一下 MyBatis 自動(dòng)配置的源碼,通過 debug 模式看了下是不是有什么問題,在查看源碼的過程中看到一個(gè)有意思的事情,SqlSessionFactoryBean 這個(gè)類直接報(bào)紅了,如下圖所示。
為什么說有意思呢?
正常情況下這個(gè)類肯定不會(huì)報(bào)錯(cuò)的。再去查詢問題,發(fā)現(xiàn) NestedIOException 這個(gè)類在 Spring 6 版本中直接刪除了。對(duì)的,直接刪除了。而 MyBatis 還沒有同步更新,所以直接就報(bào)紅了。
如果真的是版本升級(jí)導(dǎo)致的,還真就暫時(shí)沒法改,只能等 MyBatis 那邊也發(fā)布新版本才行。除了 MyBatis 之外,如果使用 Spring Boot 3 直接整合 MyBatis-Plus 這種框架,那肯定也會(huì)報(bào)錯(cuò)的。
另外,不止是 MyBatis 框架會(huì)出問題。像 Spring 6 這種直接嘎掉一些類的情況,如果其它框架里用到了一些 Spring 框架中的類,恰好也被嘎了。那么,升級(jí)到 Spring6 或者 Spring Boot 3 時(shí),都得注意一下。
解決問題:需要升級(jí)版本
好的,排查自己的代碼沒發(fā)現(xiàn)問題。只有去古狗上看看有沒有解決方案,搜了一圈,在 MyBatis 的開源倉(cāng)庫(kù)里看到了一個(gè)類似問題,解決方案也有,如下圖所示。
對(duì)的,使用 Spring Boot 3 版本整合 MyBatis 時(shí),需要把 mybatis-spring-boot-starter 也升級(jí)。mybatis-spring-boot-starter 2.x 版本暫時(shí)還不適配 Spring Boot 3 版本,沒轍。另外,由于還沒正式發(fā)版,所以需要配置一個(gè)遠(yuǎn)程倉(cāng)庫(kù)。
<dependencies> <!-- 引入 3.0.0-SNAPSHOT 版本的 mybatis-spring-boot-starter(未正式發(fā)版) --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>3.0.0-SNAPSHOT</version> </dependency> </dependencies> <repositories> <!-- 由于未正式發(fā)版,所以在Maven倉(cāng)庫(kù)里還搜不到,需要額外配置一個(gè)遠(yuǎn)程倉(cāng)庫(kù) --> <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>
總結(jié)
事情不大,本來不想單獨(dú)寫篇文章的,但是我有個(gè)預(yù)感,在項(xiàng)目中升級(jí) Spring Boot 3 時(shí)還會(huì)有其它問題。不知道 Spring6 這次更新了多少東西,連 TM 的MyBatis、MyBatis-Plus 這種常用的框架都中招了。這些就慢慢整理吧,畢竟是大版本升級(jí),難免會(huì)出現(xiàn)不兼容、等依賴更新的情況。確實(shí)沒轍,等更新唄。
如果這篇文章浪費(fèi)了你的時(shí)間,先說聲抱歉,你直接關(guān)掉網(wǎng)頁就好。
因?yàn)榫S護(hù)了幾個(gè) Spring Boot 的開源項(xiàng)目,Spring Boot 3 正式發(fā)版了,我也會(huì)及時(shí)更新版本、升級(jí)這幾個(gè) Spring Boot 實(shí)戰(zhàn)項(xiàng)目。如果碰到了什么問題,也會(huì)及時(shí)分享出來。
項(xiàng)目名稱 | 描述 | GitHub倉(cāng)庫(kù)地址 | Gitee倉(cāng)庫(kù)地址 |
---|---|---|---|
newbee-mall | Spring Boot 開源電商實(shí)戰(zhàn)項(xiàng)目(含商城端和后臺(tái)管理系統(tǒng)) | https://github.com/newbee-ltd/newbee-mall | https://gitee.com/newbee-ltd/newbee-mall |
項(xiàng)目名稱 | 描述 | GitHub倉(cāng)庫(kù)地址 | Gitee倉(cāng)庫(kù)地址 |
---|---|---|---|
My-Blog | Spring Boot 開源博客實(shí)戰(zhàn)項(xiàng)目 | https://github.com/ZHENFENG13/My-Blog | https://gitee.com/ZHENFENG13/My-Blog |
到此這篇關(guān)于SpringBoot3整合MyBatis報(bào)錯(cuò):Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are required的文章就介紹到這了,更多相關(guān)SpringBoot3整合MyBatis報(bào)錯(cuò)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 解讀@NoArgsConstructor,@AllArgsConstructor,@RequiredArgsConstructor的區(qū)別及在springboot常用地方
- 解決springboot項(xiàng)目啟動(dòng)報(bào)錯(cuò)Field xxxMapper in com...xxxController required
- SpringBoot啟動(dòng)失敗的解決方法:A component required a bean of type ‘xxxxxxx‘ that could not be found.
- springboot @RequiredArgsConstructor的概念與使用方式
相關(guān)文章
spring boot+thymeleaf+bootstrap實(shí)現(xiàn)后臺(tái)管理系統(tǒng)界面
這篇文章主要為大家詳細(xì)介紹了spring boot+thymeleaf+bootstrap簡(jiǎn)單實(shí)現(xiàn)后臺(tái)管理系統(tǒng)界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12Java實(shí)現(xiàn)字節(jié)數(shù)B轉(zhuǎn)化為KB、MB、GB的方法示例【測(cè)試可用】
這篇文章主要介紹了Java實(shí)現(xiàn)字節(jié)數(shù)B轉(zhuǎn)化為KB、MB、GB的方法,結(jié)合實(shí)例形式分析了java字節(jié)數(shù)的轉(zhuǎn)換運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2017-08-08SpringCloud超詳細(xì)講解微服務(wù)網(wǎng)關(guān)Gateway
這篇文章主要介紹了SpringCloud Gateway微服務(wù)網(wǎng)關(guān),負(fù)載均衡,熔斷和限流,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07引入QQ郵箱發(fā)送驗(yàn)證碼進(jìn)行安全校驗(yàn)功能實(shí)現(xiàn)
最近遇到這樣的需求用戶輸入自己的郵箱,點(diǎn)擊獲取驗(yàn)證碼,后臺(tái)會(huì)發(fā)送一封郵件到對(duì)應(yīng)郵箱中,怎么實(shí)現(xiàn)呢?下面小編給大家?guī)砹艘隥Q郵箱發(fā)送驗(yàn)證碼進(jìn)行安全校驗(yàn)功能,需要的朋友可以參考下2023-02-02Java中雙重檢查鎖(double checked locking)的正確實(shí)現(xiàn)
雙重檢查鎖(Double-Check Locking),顧名思義,通過兩次檢查,并基于加鎖機(jī)制,實(shí)現(xiàn)某個(gè)功能,下面這篇文章主要給大家介紹了關(guān)于Java中雙重檢查鎖(double checked locking)的相關(guān)資料,需要的朋友可以參考下2021-09-09