【概述】 偶尔有日志记录插入成功,但是表里对应数据确查不到的
【应用框架及开发适配业务逻辑】
springboot2.6,mybatis-plus3.5.1 ,dynamic-datasource-spring-boot-starter3.5.1
按多数据源分库
【背景】
简单的save方法
@DSTransactional
public boolean save(Clean entity) {
return super.save(entity);
}
调用方法调用前会打印出参数, 调用后如果返回ok,会打印成功日志.
【问题】
业务查询某条数据时,发现数据不存在,查看日志发现调用前参数和调用后都输出成功的,且没有异常产生, 类似情况其他表也偶有发生.
2 个赞
wbslxw
(Ti D Ber Cl S0j Eng)
2
是不是Java 开源框架 @DSTransactional 这个有问题
1 个赞
随缘天空
(Ti D Ber Ivw R7o Pj)
5
到tidb节点服务器上的日志目录,找到该时间段内的日志信息,看看有没有save方法对应的insert语法
2 个赞
克里克里克
(Ti D Ber H052ej9m)
6
如果库整体负载不高,可以考虑开一会generallog看看。
1 个赞
小龙虾爱大龙虾
(Minghao Ren)
8
开 general 日志看吧,或者把慢查询阈值调整为 0
1 个赞
save 方法所在的类内部有 try-catch 块,并且捕获了异常但没有抛出,MyBatis-Plus 的 super.save(entity) 可能会因为底层的 SQL 异常(如主键冲突、字段超长等)而返回 false ,或者异常被吃掉后外层逻辑依然打印了“成功日志”。
TiDB_001
(Ti D Ber No L Znn Vd)
18
大概率是多数据源事务注解、框架异常捕获逻辑导致。
核对数据源、关闭业务缓存直连数据库查询;
开启 TiDB 通用日志 / 抓包验证 SQL 是否真实执行;
排查主键冲突、字段超长等隐性报错,检查代码是否吞掉异常、误判执行结果。