背景
项目中,分主库1个 从库2个,处理周期变化数据
使用@DS注解,分别用@Slave1、@Slave2标识两个从库,主库不做标识
在代码中,为了抽象统一处理一些类似的问题,抽象出了一些方法:
处理主库业务
AbstractSingleDbBaseServiceImpl
处理双从库业务
AbstractDoubleDbBaseServiceImpl(在这里根据周期参数,调用handle中添加了@Slave1,@Slave2注解的两个方法,这两个方法又调用mapper层同一个方法)
AbstractDoubleDbDataHandle
(getDao()的返回对象就是对应数据项的mapper接口)
例如
根据业务数据的种类,各自的实现层继承了对应的抽象类,在普遍适用的方法上调用抽象方法,在需要特殊处理的功能上重载
问题
在从库数据导入的功能中,有诸多项数据,清空、插入功能都正常,但是到某一项数据的时候,其清空功能正常删除的是从库的数据,但是插入insertBatch方法即使走到了带有@Slave2注解的mapper.insertBatch调用处,插入的对象却是主库,也就是@DS在这里异常失效了,而在流程后面的其他项数据,功能也是正常的
目前观察到的区别仅仅是这项数据量比较大(也就26w条)