peterlong0612 2023-12-14 17:37 采纳率: 0%
浏览 8
已结题

@DS前后正常但是在流程某处失效

背景

项目中,分主库1个 从库2个,处理周期变化数据

使用@DS注解,分别用@Slave1、@Slave2标识两个从库,主库不做标识

在代码中,为了抽象统一处理一些类似的问题,抽象出了一些方法:

处理主库业务
AbstractSingleDbBaseServiceImpl

处理双从库业务
AbstractDoubleDbBaseServiceImpl(在这里根据周期参数,调用handle中添加了@Slave1,@Slave2注解的两个方法,这两个方法又调用mapper层同一个方法)
AbstractDoubleDbDataHandle

(getDao()的返回对象就是对应数据项的mapper接口)
例如

img

img

根据业务数据的种类,各自的实现层继承了对应的抽象类,在普遍适用的方法上调用抽象方法,在需要特殊处理的功能上重载

问题

在从库数据导入的功能中,有诸多项数据,清空、插入功能都正常,但是到某一项数据的时候,其清空功能正常删除的是从库的数据,但是插入insertBatch方法即使走到了带有@Slave2注解的mapper.insertBatch调用处,插入的对象却是主库,也就是@DS在这里异常失效了,而在流程后面的其他项数据,功能也是正常的

目前观察到的区别仅仅是这项数据量比较大(也就26w条)

  • 写回答

19条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-12-14 17:37
    关注
    获得0.45元问题酬金

    引自强大而免费的微信小程序:皆我知道

    根据您的描述,目前在处理从库数据导入功能时,清空功能正常删除从库的数据,但是在插入数据时,@DS注解异常失效,插入的对象变成了主库而不是预期的从库。此问题主要出现在处理量比较大的数据时(约26w条)。根据您的要求,我将处理方式列举如下:

    1. 确认问题范围和定位:首先需要确定问题是出现在哪些代码中,特别是涉及到数据导入的具体方法。可以通过打日志、加断点等方式来确认代码的执行流程。
    2. 检查@DS注解的使用:确保@DS注解正确使用在需要切换数据源的方法上,包括从库的清空和插入方法。
    3. 检查抽象类和具体实现类的继承关系:确保抽象类和具体实现类之间的继承关系正确,以及在具体实现类中是否对抽象方法进行了正确的重载。
    4. 检查AbstractDoubleDbBaseServiceImpl类中的handle方法:确认handle方法中是否正确调用了带有@Slave1和@Slave2注解的方法,并且参数和返回值类型都匹配。
    5. 查看插入数据的具体实现方法:仔细查看插入数据的具体实现方法,确保在该方法中使用了@DS注解来切换数据源,如果没有使用@DS注解,可以尝试手动切换数据源。
    6. 检查数据源切换的配置:确保数据源的切换配置正确,包括主库和从库的数据源配置以及@DS注解的切换规则。
    7. 性能调优:如果插入大量数据时出现性能问题,可以考虑对插入方法进行性能优化,例如分批插入、批量提交等方式。

    如果以上步骤仍然无法解决问题,建议提供涉及到数据导入的具体代码片段,以便进一步分析和帮助解决问题。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 12月22日
  • 创建了问题 12月14日

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?