Skip to content

增加对seata框架代理数据源的检测 #704

Description

@iAmClever

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

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 ~~~

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions