业务需求:用户每次修改数据,都要记录修改留痕信息;
形如:【订单号】由1001改为1002,【备注】由空改为 “客户要求修改订单号”
之前做法是业务代码主动写结合aop统一拦截写日志。
动手开始做技术预研:
简化的order数据表结构如下:
偶然看到canal后,立刻想到,可以借助canal实现这个需求,业务系统可以和修改留痕功能解耦。
首先看看canal解析binlog后封装的数据结构
可以发现里面列信息缺少【注释】这个元数据。诸如是否主键,是否为空,字段类型这些都有,说明canal后台只是取了部分原数据。
现在有两条路
1:客户端缓存数据库元数据。
2:改下canal源代码,返回注释这个元数据。
现在说下方式二
查看代码,寻找解析binlog的代码,最终定位到com.alibaba.otter.canal.parse.inbound.mysql.dbsync.LogEventConvert类的如下方法,可