前段时间同事在项目当中使用到多数据源,项目集成的是 mybatis plus ,遇到一个非常神仙的 BUG,有数据源 A ,数据源 B,针对数据源 A 的所有操作都没有问题,针对数据源 B 的所有操作,除了批量的操作也都没有问题!!!
当进行批量操作的时候,发现会提示,xxx 表不存在!!!,但是如果是查询数据,不批量进行操作,就可以查询出来,所以当遇到这个神仙 BUG 的时候,直接蒙圈了!!!
最后进行到处尝试,分析源码,等待各种方式,搞了一两天,终于知道原因了,mybatis plus 里面的批量操作都没有走 DAO 层,是通过 SqlSession 进行的,然后数据源的切换是在 DAO 进行的。
分析到上面,本以为找到了问题,发现数据源的切换是手写的一个注解,这个注解在其他项目当中是完全没有出现这个问题的!!!最后一步一步跟踪代码分析发现主要原因是在项目配置多数据源的时候,会指定每个数据源的 DAO 层接口位置。然后将 DAO 接口位置和数据源的关系存储起来,然后调用 DAO 层的时候就调用对应的数据源。但是在这个项目当中,DAO 层没有分包,两个数据源指定的 DAO 层位置都一样,就导致出现这个问题。
最终解决方式:DAO 层按照数据源分包就可以了。
总结:按照规范来说项目多数据源的时候都是需要进行分包的,这样比较容易区分管理。也会避免很多不必要的问题!!!
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于