【沉浸式解决问题】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
*/
相关推荐
cfm_29142 分钟前
SpringBoot MockMvc
spring boot·后端·log4j
豆瓣鸡3 小时前
封装 API 请求日志切面——从注解定义到 Starter 自动装配
java·开发语言·spring boot
正儿八经的少年7 小时前
Spring Boot
java·spring boot·后端
豆瓣鸡7 小时前
封装 Jackson 配置 Starter:统一解决 LocalDateTime 请求解析和响应格式化问题
java·spring boot
宠友信息7 小时前
资源权限与钱包流水在即时通讯源码后端架构中的设计
java·spring boot·redis·websocket·缓存
霸道流氓气质8 小时前
Spring Boot 接入阿里云 RocketMQ 完整指南
spring boot·阿里云·java-rocketmq
卓怡学长8 小时前
w272基于springboot便民医疗服务小程序
java·spring boot·spring·小程序·intellij-idea
程序员小郭838 小时前
Java + POI 实现高性能Excel导出(支持普通List、MyBatis Cursor流式导出、VO适配)
spring boot·后端·excel
豆瓣鸡8 小时前
Spring Boot 全局异常处理与参数校验
spring boot·后端
Arya_aa8 小时前
植物病虫害识别系统–––登录模块
spring boot