spring boot集成mybatisplus(SpringBoot3整合MyBatis报错:Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are required)
遇到了一个 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除注明转载/出处外 ,皆为作者原创 ,欢迎转载 ,但未经作者同意必须保留此段声明 ,且在文章页面明显位置给出原文链接 ,否则保留追究法律责任的权利。
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!