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

@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日