【沉浸式解决问题】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
*/
相关推荐
wb043072013 小时前
使用 Java 开发 MCP 服务并发布到 Maven 中央仓库完整指南
java·开发语言·spring boot·ai·maven
nbwenren5 小时前
Springboot中SLF4J详解
java·spring boot·后端
helx825 小时前
SpringBoot中自定义Starter
java·spring boot·后端
rleS IONS6 小时前
SpringBoot获取bean的几种方式
java·spring boot·后端
R***z1017 小时前
Spring Boot 整合 MyBatis 与 PostgreSQL 实战指南
spring boot·postgresql·mybatis
赵丙双8 小时前
spring boot AutoConfiguration.replacements 文件的作用
java·spring boot
计算机学姐9 小时前
基于SpringBoot的兴趣家教平台系统
java·spring boot·后端·spring·信息可视化·tomcat·intellij-idea
bearpping10 小时前
Spring Boot + Vue 全栈开发实战指南
vue.js·spring boot·后端
__土块__11 小时前
一次 Spring Boot 自动装配机制源码走读:从误用 @Component 到理解 Bean 生命周期
spring boot·源码分析·自动装配·bean生命周期·@configuration·configurationclasspostprocessor·cglib代理
回到原点的码农13 小时前
Spring Boot 3.3.4 升级导致 Logback 之前回滚策略配置不兼容问题解决
java·spring boot·logback