同样发现了这个问题,
场景描述:由于源库是一个采买项目,里面表结构定义比较混乱,存在不同的主键字段,id,ID,SEQORDER 等等。
在rdb文件夹下配置多个yml时,targetPk 写的是各个表自己的主键,但是在代码位置
com.alibaba.otter.canal.client.adapter.support.YamlUtils#ymlToObj(java.lang.String, java.lang.String, java.lang.Class, java.lang.String, java.util.Properties)
中,会导致第二次配置加载时读取了第一次配置的targetPk,越晚加载的拥有的targetPk越多。
最终在实际同步时,拼接主键逻辑com.alibaba.otter.canal.client.adapter.rdb.service.RdbSyncService#appendCondition(com.alibaba.otter.canal.client.adapter.rdb.config.MappingConfig.DbMapping, java.lang.StringBuilder, java.util.Map<java.lang.String,java.lang.Integer>, java.util.List<java.util.Map<java.lang.String,?>>, java.util.Map<java.lang.String,java.lang.Object>, java.util.Map<java.lang.String,java.lang.Object>)
进入type==null 判断后报错。
临时方案是注释掉部分代码,暂时没有出现问题。
希望有完整的修复方案,感谢。