目录
- 一、问题描述
- 二、场景还原
- 1. 测试mapper
- 2. 测试service
- 三、原因分析
- 四、解决方案
- 1. DemoApplicationTests
- 2. DemoApplication
- 后记
一、问题描述
在Application文件中加了@ComponentScan注解,此后运行任何测试方法均报错
java.lang.IllegalStateException: Failed to load ApplicationContext
Caused by: java.lang.IllegalArgumentException: Property ‘sqlSessionFactory’ or ‘sqlSessionTemplate’ are required
意思就是缺少'sqlSessionFactory' 或者 'sqlSessionTemplate'
,导致'testMapper'
创建失败,导致'testServiceImpl'
创建失败,最后导致ApplicationContext
spring的上下文创建失败
二、场景还原
先看下整体目录
1. 测试mapper
最开始是测试MybatisPlus的BaseMapper中的方法
@AutowiredUserMapper userMapper;@Testvoid test1() {List<User> userList = new ArrayList<>();userMapper.insert(userList);}
但是报错找不到UserMapper的bean,感觉不对劲,因为mapper文件上都加了@Mapper
的注解
查了一下,然后在Application上加了mapper扫描路径注解,问题算是解决了
@SpringBootApplication
@MapperScan("com.baomidou.mapper")
public class DemoApplication {
}
2. 测试service
接下来测试MybatisPlus的IService中的方法
@AutowiredIUserService userService;@Testvoid 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
再次百度,说是再加上扫描路径,感觉有道理
加完以后如下
@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
import com.baomidou.DemoApplication;@SpringBootTest(classes = DemoApplication.class)
class DemoApplicationTests {
}
2. DemoApplication
@MapperScan
还是不能去掉
@SpringBootApplication
@MapperScan("com.baomidou.mapper")
public class DemoApplication {
}
后记
原因很无聊,但是排查的过程很麻烦,大家以后都要细心一点><
喜欢的点个关注吧><!祝你永无bug!
/*_ooOoo_o8888888o88" . "88(| -_- |)O\ = /O____/`---'\____.' \\| |// `./ \\||| : |||// \/ _||||| -:- |||||- \| | \\\ - /// | || \_| ''\---/'' | |\ .-\__ `-` ___/-. /___`. .' /--.--\ `. . __."" '< `.___\_<|>_/___.' >'"".| | : `- \`.;`\ _ /`;.`/ - ` : | |\ \ `-. \_ __\ /__ _/ .-` / /
======`-.____`-.___\_____/___.-`____.-'======`=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^佛祖保佑 永无BUG
*/