1.背景
当前项目里面已经引入了seata并稳定运行了一段时间后,引入了dynamic-datasource框架,由于没有剔除掉seata对数据源的自动代理,导致分支事务重复注册了两次,并且commit、rollback也出现异常

2.建议解决方案
我的想法是:
1.在seata这边增加对数据源是否要代理的判断
如果是AbstractRoutingDataSource类型的datasource,就不对该数据源进行代理,防止seata对混合数据源发生代理导致问题。和seata主要contributor @funky-eyes 讨论后,已经提了pr( apache/incubator-seata#7194 ) 并采纳
2.dynamic-datasource这边增加对seata框架代理数据源的检测,防止出现AbstractRoutingDataSource类型的数据源被代理的情况导致的异常
增加一个SeataDataSourceChecker,在程序启动成功后,如果发现【spring.datasource.dynamic.seata】是开启的状态,就去检测【com.baomidou.dynamic.datasource.ds.AbstractRoutingDataSource】类型的数据源是否被seata代理,如果是,则打印错误日志提示用户,防止用户引入组件后出现问题
如果认可这个建议,我可以尝试提交修改的 PR ~~~
1.背景

当前项目里面已经引入了seata并稳定运行了一段时间后,引入了dynamic-datasource框架,由于没有剔除掉seata对数据源的自动代理,导致分支事务重复注册了两次,并且commit、rollback也出现异常
2.建议解决方案
我的想法是:
1.在seata这边增加对数据源是否要代理的判断
如果是AbstractRoutingDataSource类型的datasource,就不对该数据源进行代理,防止seata对混合数据源发生代理导致问题。和seata主要contributor @funky-eyes 讨论后,已经提了pr( apache/incubator-seata#7194 ) 并采纳
2.dynamic-datasource这边增加对seata框架代理数据源的检测,防止出现AbstractRoutingDataSource类型的数据源被代理的情况导致的异常
增加一个SeataDataSourceChecker,在程序启动成功后,如果发现【spring.datasource.dynamic.seata】是开启的状态,就去检测【com.baomidou.dynamic.datasource.ds.AbstractRoutingDataSource】类型的数据源是否被seata代理,如果是,则打印错误日志提示用户,防止用户引入组件后出现问题
如果认可这个建议,我可以尝试提交修改的 PR ~~~