SpringBoot3整合MyBatis报错:Property sqlSessionFactory or
wptr33 2025-01-12 19:03 15 浏览
遇到了一个 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 这种常用的框架都中招了。这些就慢慢整理吧,毕竟是大版本升级,难免会出现不兼容、等依赖更新的情况。确实没辙,等更新呗。
- 上一篇:ORACLE优化之SQL篇
- 下一篇:Oracle监听常见问题及解决办法
相关推荐
- 每天一个AI姬,AMD核显用户有福了,AI绘画打破 NVIDIA 显卡垄断
-
使用StableDiffusion进行AI绘画,并不一定只能使用NVIDIA英伟达显卡,甚至,也不一定只能使用独立显卡。今天我们使用AMD6800H核显,并安装了StableDif...
- NETworkManager:功能强大的网络管理与问题排除工具
-
关于NETworkManagerNETworkManager是一款功能强大的网络管理与问题排除工具,该工具完全开源,可以帮助广大研究人员轻松管理目标网络系统并排除网络疑难问题。该工具使用远程桌面、Po...
- AMD也能深度学习+免费AI绘画:StableDiffusion+ROCm部署教程!
-
某国政客扇扇嘴皮子,CN玩硬件和深度学习的圈子里就掀起了一场风暴,这就是著名的嘴皮子效应(误)。没了高性能计算的A100H100倒也能理解,但是美利坚这波把RTX4090禁售了就让人无语了,所以不少做...
- windows 下编译 python_rtmpstream
-
最近在研究数字人,看了大咖的项目(https://github.com/lipku/metahuman-stream),尝试编译此项目的依赖项目python_rtmpstream(https://gi...
- 如何使用 Python 操作 Git 代码?GitPython 入门介绍
-
花下猫语:今天,我在查阅如何用Python操作Gitlab的时候,看到这篇文章,觉得还不错,特分享给大家。文中还提到了其它几种操作Git的方法,后续有机会的话,再陆续分享之~~作者:匿蟒...
- 网上看了不少,终于把ZlmediaKit流媒体框架搭建起来啦
-
你都站在2023年代了,视频通话、视频直播、视频会议、视频监控就是风口浪尖上的猪师兄,只要你学那么一丁点,拿个高薪的工作不过分吧!我也是半瓶子晃荡的,所以路人呀,共学习,同进步!本篇开始,只讲在Lin...
- MacDown:一款 macOS 的强大 Markdown 编辑器
-
大家好,很高兴又见面了,我是"...
- ZLMediaKit安装配置和推拉流
-
一、ZLMediaKit库简介ZLMediaKit是一个基于...
- 大神赞过的:学习 WebAssembly 汇编语言程序设计
-
文/阿里淘系F(x)Team-旭伦随着前端页面变得越来越复杂,javascript的性能问题一再被诟病。而Javascript设计时就不是为了性能优化设计的,这使得浏览器上可以运行的本地语言一...
- 【Docker】部署WVP视频监控平台
-
回来Docker系列,今天将会跟大家分享一则关于开源WVP视频监控平台的搭建。先说结论吧,一开始按照网上说的一步一步搭建没有搭建成功,不知道是版本太旧还是我这边机器有问题,尝试了好几个不同方式的搭建都...
- MongoDB+GridFS存储文件方案
-
GridFS是MongoDB的一个内置功能,它提供一组文件操作的API以利用MongoDB存储文件,GridFS的基本原理是将文件保存在两个Collection中,一个保存文件索引,一个保存文...
- 【开源】强大、创新且直观的 EDA套件
-
今天分享的LibrePCB是...
- Ollama如何制作自己的大模型?
-
背景Llama3发布了,这次用了...
- Ollama使用指南【超全版】
-
一、Ollama快速入门Ollama是一个用于在本地运行大型语言模型的工具,下面将介绍如何在不同操作系统上安装和使用Ollama。官网:https://ollama.comGithub:http...
- 基于区块链的价值共享互联网即时通讯应用平台源码免费分享
-
——————关注转发之后私信回复【源码】即可免费获取到本项目所有源码基于区块链的价值共享互联网即时通讯应用平台,是一个去中心化的任何人都可以使用的通讯网络,是一款基于区块链的价值共享互联网即时通讯AP...
- 一周热门
-
-
C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (1)
-
因果推断Matching方式实现代码 因果推断模型
-
git pull命令使用实例 git pull--rebase
-
git 执行pull错误如何撤销 git pull fail
-
面试官:git pull是哪两个指令的组合?
-
git fetch 和git pull 的异同 git中fetch和pull的区别
-
git pull 和git fetch 命令分别有什么作用?二者有什么区别?
-
还可以这样玩?Git基本原理及各种骚操作,涨知识了
-
git pull 之后本地代码被覆盖 解决方案
-
git命令之pull git.pull
-
- 最近发表
-
- 每天一个AI姬,AMD核显用户有福了,AI绘画打破 NVIDIA 显卡垄断
- NETworkManager:功能强大的网络管理与问题排除工具
- AMD也能深度学习+免费AI绘画:StableDiffusion+ROCm部署教程!
- windows 下编译 python_rtmpstream
- 如何使用 Python 操作 Git 代码?GitPython 入门介绍
- 网上看了不少,终于把ZlmediaKit流媒体框架搭建起来啦
- MacDown:一款 macOS 的强大 Markdown 编辑器
- ZLMediaKit安装配置和推拉流
- 大神赞过的:学习 WebAssembly 汇编语言程序设计
- 【Docker】部署WVP视频监控平台
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)