SpringBoot3整合MyBatis出现异常:Property 'sqlSessionFactory'or 'sqlSessionTemplate' are required

目录
  • 交代一下背景
  • 问题出现
  • 问题排查
  • 解决问题:需要升级版本
  • 总结

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>

<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

到此这篇关于SpringBoot3整合MyBatis报错:Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are required的文章就介绍到这了,更多相关SpringBoot3整合MyBatis报错内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringBoot整合Mybatis,解决TypeAliases配置失败的问题

    问题描述 在应用MyBatis时,使用对象关系映射,将对象和Aliase映射起来. 在Mybatis的文档明确写出,如果你没有明确定义实体类的Aliase,框架会自动将Class Name自动作为别名. 那么问题来了,当使用java -jar xxx.jar&启动的时候,会报出以下错误, Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'XXXXX'.

  • SpringBoot2.x 整合Spring-Session实现Session共享功能

    1.前言 发展至今,已经很少还存在单服务的应用架构,不说都使用分布式架构部署, 至少也是多点高可用服务.在多个服务器的情况下,Seession共享就是必须面对的问题了. 解决Session共享问题,大多数人的思路都是比较清晰的, 将需要共享的数据存在某个公共的服务中,如缓存.很多人都采用的Redis,手动将Session存在Redis,需要使用时,再从Redsi中读取数据.毫无疑问,这种方案是可行的,只是在手动操作的工作量确实不少. LZ在这里采用的Spring-Session来实现.它使用代理

  • SpringBoot 整合Jest实例代码讲解

    [1]添加Elasticsearch-starter pom文件添加starter如下: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> SpringBoot默认支持两种技术和Elasticsearch进行交互:Sp

  • Springboot整合Spring Cloud Kubernetes读取ConfigMap支持自动刷新配置的教程

    1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! Docker & Kubernetes相关文章:容器技术 之前介绍了Spring Cloud Config的用法,但对于Kubernetes应用,可能会需要读取ConfigMap的配置,我们看看Springboot是如何方便地读取ConfigMap和Secret. 2 整合Spring Cloud Kubenetes Spring Cloud Kubernetes提供了Spring Cloud应用与Kubernetes服

  • springboot restTemplate连接池整合方式

    目录 springboot restTemplate连接池整合 restTemplate 引入apache httpclient RestTemplate配置类 RestTemplate连接池配置参数 测试带连接池的RestTemplate RestTemplate 配置http连接池 springboot restTemplate连接池整合 restTemplate 使用http连接池能够减少连接建立与释放的时间,提升http请求的性能.如果客户端每次请求都要和服务端建立新的连接,即三次握手将

  • SpringBoot整合ES解析搜索返回字段问题

    目录 1. 数据构造 2. ElasticSearch 查询集群中所有索引中的所有文档 3. ElasticSearch 搜索结果字段解析 1. took 搜索请求耗费了多少毫秒 2. shards 查询中参与分片的总数 3. timed_out 查询是否超时 4. hits 表示搜索结果 4. SpringBoot 整合ElasticSearch获取搜索结果 5 .ElasticSearch 搜索结果的面试题 1. 数据构造 索引2个文档到 hotel 索引中: PUT /hotel/_doc

  • SpringBoot整合ES-Elasticsearch的实例

    目录 概述 添加Maven依赖 配置application.yml 创建索引对象 SpringBoot操作ES数据的三种方式 实现索引对应的Repository 文档操作 文档保存.查询.删除 分页查询与滚动查询 ES深度分页 vs 滚动查询 SpringBoot集成ES基本使用 在test中测试 概述 本文介绍 Spring Boot 项目中整合 ElasticSearch 并实现 CRUD 操作,包括分页.滚动等功能. 添加Maven依赖 <dependency>       <gr

  • es(elasticsearch)整合SpringCloud(SpringBoot)搭建教程详解

    注意:适用于springboot或者springcloud框架 1.首先下载相关文件 2.然后需要去启动相关的启动文件 3.导入相关jar包(如果有相关的依赖包不需要导入)以及配置配置文件,并且写一个dao接口继承一个类,在启动类上标注地址 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> &l

  • spring 整合 mybatis 中数据源的几种配置方式(总结篇)

    因为spring 整合mybatis的过程中, 有好几种整合方式,尤其是数据源那块,经常看到不一样的配置方式,总感觉有点乱,所以今天有空总结下. 一.采用org.mybatis.spring.mapper.MapperScannerConfigurer 其实逆向工程也是这种方式 1.数据源配配置文件 2.DAO文件 package com.jdd.mapper; import com.jdd.pojo.Employee; import java.util.List; public interfa

  • springboot多模块化整合mybatis,mapper自动注入失败问题及解决

    目录 springboot多模块化整合mybatis,mapper自动注入失败 问题 解决 springboot mapper注入失败的一种原因 具体情况是 解决办法 springboot多模块化整合mybatis,mapper自动注入失败 问题 启动类添加@MapperScan或@ComponentScan,mapper类添加@Mapper或@Repository ==> Consider defining a bean of type 'com.ten.mapper.UserMapper'

  • MyBatis异常-Property 'configLocation' not specified, using default MyBatis Configuration

    配置文件如下: base-context.xml文件如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http

  • SpringMVC整合mybatis实例代码

    MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis . 一.逆向工程生成基础信息 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis G

  • Spring mvc整合mybatis(crud+分页插件)操作mysql

    一.web.xml配置 我们都知道java ee的项目启动的第一件事就是读取web.xml,spring mvc 的web.xml我在上一篇文章中也做了详细讲解,不懂的可以回头看看,讲解的这个项目源码我也会放到github上,也可以去那里看看,这里就不做介绍了. web.xml 配置 <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:/c

  • spring 整合mybatis后用不上session缓存的原因分析

    因为一直用spring整合了mybatis,所以很少用到mybatis的session缓存. 习惯是本地缓存自己用map写或者引入第三方的本地缓存框架ehcache,Guava 所以提出来纠结下 实验下(spring整合mybatis略,网上一堆),先看看mybatis级别的session的缓存 放出打印sql语句 configuration.xml 加入 <settings> <!-- 打印查询语句 --> <setting name="logImpl"

  • Spring整合MyBatis(Maven+MySQL)图文教程详解

    一. 使用Maven创建一个Web项目 为了完成Spring4.x与MyBatis3.X的整合更加顺利,先回顾在Maven环境下创建Web项目并使用MyBatis3.X,第一.二点内容多数是回顾过去的内容 . 1.2.点击"File"->"New"->"Other"->输入"Maven",新建一个"Maven Project",如下图所示: 1.2.请勾选"Create a si

  • Spring整合Mybatis使用<context:property-placeholder>时的坑

    背景 最近项目要上线,需要开发一个数据迁移程序.程序的主要功能就是将一个数据库里的数据,查询出来经过一系列处理后导入另一个数据库.考虑到开发的方便快捷.自然想到用spring和mybatis整合一下.甚至用mybatis的自动代码生成,可以省下大量dao层的开发. 整合的坑 之前的项目:以前也有过这种类似的程序,就把spring和mybatis整合的配置直接拿来修改下用.之前的整合配置是这样子的: 1.考虑到数据库url.用户名密码的可配置性,将这些信息放入properties文件.在sprin

  • springboot整合mybatis中的问题及出现的一些问题小结

    1.springboot整合mybatis mapper注入时显示could not autowire,如果强行写(value  = false ),可能会报NullPointException异常 解决方案: dao层加注解@Component(value = "首字母小写的接口名如UserMapper->userMapper") dao层还可以加注解@Mapper 2.The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecogni

随机推荐