【沉浸式解决问题】Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are required_property \'sqlsessionfactory\' or \'sqlsessiontemplat
目录
- 一、问题描述
- 二、场景还原
-
- 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中的方法
@Autowired UserMapper userMapper; @Test void 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中的方法
@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
再次百度,说是再加上扫描路径,感觉有道理
加完以后如下
@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_ o8888888o 88\" . \"88 (| -_- |) O\\ = /O ____/`---\'\\____ .\' \\\\| |// `. / \\\\||| : |||// \\ / _||||| -:- |||||- \\ | | \\\\\\ - /// | | | \\_| \'\'\\---/\'\' | | \\ .-\\__ `-` ___/-. / ___`. .\' /--.--\\ `. . __ .\"\" \'< `.___\\__/___.\' >\'\"\". | | : `- \\`.;`\\ _ /`;.`/ - ` : | | \\ \\ `-. \\_ __\\ /__ _/ .-` / /======`-.____`-.___\\_____/___.-`____.-\'====== `=---=\'^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 佛祖保佑 永无BUG*/