【沉浸式解决问题】Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are required

目录

一、问题描述

在Application文件中加了@ComponentScan注解,此后运行任何测试方法均报错

java.lang.IllegalStateException: Failed to load ApplicationContext

Caused by: java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required


意思就是缺少'sqlSessionFactory' 或者 'sqlSessionTemplate',导致'testMapper'创建失败,导致'testServiceImpl'创建失败,最后导致ApplicationContextspring的上下文创建失败


二、场景还原

先看下整体目录

1. 测试mapper

最开始是测试MybatisPlus的BaseMapper中的方法

java 复制代码
    @Autowired
    UserMapper userMapper;

    @Test
    void test1() {
        List<User> userList = new ArrayList<>();
        userMapper.insert(userList);
    }

但是报错找不到UserMapper的bean,感觉不对劲,因为mapper文件上都加了@Mapper的注解

查了一下,然后在Application上加了mapper扫描路径注解,问题算是解决了

java 复制代码
@SpringBootApplication
@MapperScan("com.baomidou.mapper")
public class DemoApplication {
}

2. 测试service

接下来测试MybatisPlus的IService中的方法

java 复制代码
    @Autowired
    IUserService userService;

    @Test
    void test4() {
        List<User> userList = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            User user = new User();
            user.setName("姓名"+i);
            userList.add(user);
        }
        userService.saveBatch(userList,2);
    }

继续报错找不到IUserService的bean

再次百度,说是再加上扫描路径,感觉有道理

加完以后如下

java 复制代码
@SpringBootApplication
@MapperScan("com.baomidou.mapper")
@ComponentScan(basePackages = "com.baomidou")
public class DemoApplication {
}

这下坏了,再运行就报问题描述中的错误

有查到说显示注入一下的,创建了一个AbstractDao仍然没用


三、原因分析

后续进行控制变量测试,重写创建一个测试类,注释一些代码,最终发现核心问题就是加了@ComponentScan(basePackages = "com.baomidou")这句话,导致spring上下文创建失败,可能是导致默认路径冲突了,最基础的bean也无法生成。

当然,以上只是表象,根本原因是测试类和启动类都在com.example.demo包下,而所有的实体类等文件都在com.baomidou目录下,所以启动错误了


四、解决方案

为了改动最小,可以把DemoApplication启动类复制到com.baomidou目录下一份,如上图,再把这个删除,然后在测试类中设置启动类,修改结果如下

1. DemoApplicationTests

java 复制代码
import com.baomidou.DemoApplication;

@SpringBootTest(classes = DemoApplication.class)
class DemoApplicationTests {
}

2. DemoApplication

@MapperScan还是不能去掉

java 复制代码
@SpringBootApplication
@MapperScan("com.baomidou.mapper")
public class DemoApplication {
}

后记

原因很无聊,但是排查的过程很麻烦,大家以后都要细心一点><


喜欢的点个关注吧><!祝你永无bug!

txt 复制代码
/*
                   _ooOoo_
                  o8888888o
                  88" . "88
                  (| -_- |)
                  O\  =  /O
               ____/`---'\____
             .'  \\|     |//  `.
            /  \\|||  :  |||//  \
           /  _||||| -:- |||||-  \
           |   | \\\  -  /// |   |
           | \_|  ''\---/''  |   |
           \  .-\__  `-`  ___/-. /
         ___`. .'  /--.--\  `. . __
      ."" '<  `.___\_<|>_/___.'  >'"".
     | | :  `- \`.;`\ _ /`;.`/ - ` : | |
     \  \ `-.   \_ __\ /__ _/   .-` /  /
======`-.____`-.___\_____/___.-`____.-'======
                   `=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            佛祖保佑       永无BUG
*/
相关推荐
MC丶科4 小时前
【SpringBoot 快速上手实战系列】5 分钟用 Spring Boot 搭建一个用户管理系统(含前后端分离)!新手也能一次跑通!
java·vue.js·spring boot·后端
lang201509286 小时前
Spring Boot 入门:5分钟搭建Hello World
java·spring boot·后端
Javashop_jjj7 小时前
三勾软件| 用SpringBoot+Element-UI+UniApp+Redis+MySQL打造的点餐连锁系统
spring boot·ui·uni-app
PHP源码7 小时前
SpringBoot校园二手商城系统
java·spring boot·springboot二手商城·java校园二手商城系统
毕业设计制作和分享7 小时前
springboot159基于springboot框架开发的景区民宿预约系统的设计与实现
java·spring boot·后端
MC丶科9 小时前
【SpringBoot常见报错与解决方案】端口被占用?Spring Boot 修改端口号的 3 种方法,第 3 种 90% 的人不知道!
java·linux·spring boot
计算机学长felix9 小时前
基于SpringBoot的“中学信息技术课程教学网站”的设计与实现(源码+数据库+文档+PPT)_2025-10-17
数据库·spring boot·后端
Luffe船长10 小时前
前端vue2+js+springboot实现excle导入优化
前端·javascript·spring boot
周杰伦_Jay10 小时前
【Spring Boot从入门到精通】原理、实战与最佳实践
java·spring boot·后端