项目不规范引起的Mybatis Plus多数据源批量操作提示表不存在的问题

前段时间同事在项目当中使用到多数据源,项目集成的是mybatis plus ,遇到一个非常神仙的BUG,有数据源A ,数据源B,针对数据源A的所有操作都没有问题,针对数据源B的所有操作,除了批量的操作也都没有问题!!!

当进行批量操作的时候,发现会提示,xxx表不存在!!!,但是如果是查询数据,不批量进行操作,就可以查询出来,所以当遇到这个神仙BUG的时候,直接蒙圈了!!!

最后进行到处尝试,分析源码,等待各种方式,搞了一两天,终于知道原因了,mybatis plus里面的批量操作都没有走DAO层,是通过SqlSession进行的,然后数据源的切换是在DAO进行的。

分析到上面,本以为找到了问题,发现数据源的切换是手写的一个注解,这个注解在其他项目当中是完全没有出现这个问题的!!!最后一步一步跟踪代码分析发现主要原因是在项目配置多数据源的时候,会指定每个数据源的DAO层接口位置。然后将DAO接口位置和数据源的关系存储起来,然后调用DAO层的时候就调用对应的数据源。但是在这个项目当中,DAO层没有分包,两个数据源指定的DAO层位置都一样,就导致出现这个问题。

最终解决方式:DAO层按照数据源分包就可以了。

总结:按照规范来说项目多数据源的时候都是需要进行分包的,这样比较容易区分管理。也会避免很多不必要的问题!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章