记处理spring-devtools 和 通用mapper 使用问题

问题:git

  tk.mybatis.mapper.MapperException: 没法获取实体类com.*.* 对应的表名github

环境:spring

  springboot 2.0.6, 通用mapper 2.0.4,还有 spring-devtools springboot

描述一下:mybatis

  这个环境我以前在用,也用的好好的,并无出问题。app

解决:工具

  问题出来了仍是中文异常(通用mapper 抛出的异常),习惯性的度娘,其实这个问题我以前遇到过,果然度娘上的大神都说是配置问题(@MapperScan 导入包为import tk.mybatis.spring.annotation.MapperScan;),怎么可能?我仍是检查了一下,固然不多是配置出错了。测试

  去翻了一下通用mapper的文档,找到问题了:Spring Boot 中使用 Devtools 和 通用mapper 不兼容,做者说问题是由于热部署插件会把项目中classes下的类和jar包下的类分开加载(RestartClassLoader ,AppClassLoader ),通用mapper的EntityHelper初始化就读不到相关的实体类信息了,以前的版本解决方法就是把mapper的相关jar包经过配置让RestartClassLoader去加载,我也跟着试了一下,发现并不行。继续看文档。。。而后看到做者写道:“若是你真遇到这个问题,最直接的方法就是禁用 Devtools 工具。”........不可能算了,热部署在开发中这么方便,丢了实在惋惜,想一想做者发现的问题就是类不是同一种方式加载的,那上面的配置应该是正确的思路,别人怎么就能解决呢。spa

  看着看着就有了新发现:我这里mapper加载到的实体类和接口有的是其余项目中写的,而后经过本地jar导入当前项目的 和通用mapper和做者以前测试 时说的状况差很少。那就把这些实体类接口经过配置让RestartClassLoader去加载(spring-devtools.properties):.net

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 介绍

相关文章
相关标签/搜索