别裁伪体亲风雅,转益多师是汝师。这篇文章主要讲述记处理spring-devtools 和 通用mapper 使用问题相关的知识,希望能为你提供帮助。
问题:
tk.mybatis.mapper.MapperException: 无法获取实体类com.*.* 对应的表名
环境:
springboot 2.0.6, 通用mapper 2.0.4,还有 spring-devtools
描述一下:
这个环境我之前在用,也用的好好的,并没有出问题。
解决:
问题出来了还是中文异常(通用mapper
抛出的异常),习惯性的度娘,其实这个问题我之前遇到过,果真度娘上的大神都说是配置问题(@MapperScan 导入包为import tk.mybatis.spring.annotation.MapperScan;
),怎么可能?我还是检查了一下,当然不可能是配置出错了。
去翻了一下通用mapper的文档,找到问题了:Spring Boot 中使用 Devtools 和 通用mapper 不兼容,作者说问题是因为热部署插件会把项目中classes下的类和jar包下的类分开加载(RestartClassLoader
,AppClassLoader
),通用mapper的EntityHelper初始化就读不到相关的实体类信息了,之前的版本解决方法就是把mapper的相关jar包通过配置让RestartClassLoader去加载,我也跟着试了一下,发现并不行。继续看文档。。。然后看到作者写道:“如果你真遇到这个问题,最直接的方法就是禁用 Devtools 工具。”........不可能算了,热部署在开发中这么方便,丢了实在可惜,想想作者发现的问题就是类不是同一种方式加载的,那上面的配置应该是正确的思路,别人怎么就能解决呢。
看着看着就有了新发现:我这里mapper加载到的实体类和接口有的是其他项目中写的,然后通过本地jar导入当前项目的。
和通用mapper和作者之前测试
时说的情况差不多。那就把这些实体类接口通过配置让RestartClassLoader去加载(spring-devtools.properties):
restart.include.mapper=/mapper-[\w-\.]+jar,/mycorp-[\w-\.]+jar
启动测试.... 妈蛋,还是这个错。想想mapper作者说过:“最合理的情况就是没有 spring-devtools.properties 配置文件”。那就是不用把通用mapper相关包加进去:
restart.include.mapper=/mycorp-[\w-\.]+jar
理论上这样才合理(这样也行,那应该时我上面的配置用“,”隔开是错的。。):
restart.include.mapper=/mapper-[\w-\.]+jar restart.include.myname=/mycorp-[\w-\.]+jar
这样把我自己的实体类和接口包使用RestartClassLoader去加载,启动测试.... 竟然可以了
问题估计就是通用mapper需要扫描的接口和对应的实体类没有扫描到而已,所以要用热部署和通用mapper的话就检查一下所使用的mapper接口和实体类有没有可能不在RestartClassLoader中加载
参考:Spring DevTools 介绍
【记处理spring-devtools 和 通用mapper 使用问题】
推荐阅读
- android,Exoplayer实现视频播放器
- Mybatis里Mapper映射sql文件里insert的主键返回selectKey使用
- 如果在applicationContext.xml中没有配置bean的属性,那么也会导致空指针异常
- mybatis框架下使用generator插件自动生成domain/mapping/mapper
- 极速搭建RTMP直播流服务器+webapp (vue) 简单实现直播效果
- swappiness的比例值设置
- 当我们按下电源键,Android 究竟做了些什么()
- Android学习—— Android高级控件
- application.properties中自定义属性的使用