baomidou / dynamic-datasource

dynamic datasource for springboot 多数据源 动态数据源 主从分离 读写分离 分布式事务
https://www.kancloud.cn/tracy5546/dynamic-datasource/2264611
Apache License 2.0
4.67k stars 1.19k forks source link

Seata集成的问题 #245

Closed terminux closed 4 years ago

terminux commented 4 years ago

Enviroment

JDK Version(required): 1.8

SpringBoot Version(required): 2.1.7.RELEASE

dynamic-datasource-spring-boot-starter Version(required): 3.0.0 | 3.1.1

druid Version(optional):1.1.21

Seata Version: 1.0.0 | 1.2.0

Describe

假设有两个数据源 ds_a (primary), ds_b ,它们各自都会有一个表 undo_log (seata内置表)

先对 ds_a 操作并且开启分布式事务,然后切换到 ds_b 操作,在事务不回滚的情况下

期望结果:

业务数据正常,分布式事务完成后, ds_ads_b 下的 undo_log 表对应的记录均会被正常删除

实际结果:

业务数据正常,但是 ds_a 下的 undo_log 记录可以正常删除,而 ds_b 下的 undo_log 表里的记录却无法删除,会始终遗留下来,不知道是seata的问题还是多数据源整合的问题

huayanYu commented 4 years ago

我当时测试似乎没这个问题,我的例子也是抄的官方的。 所以如果有问题也肯定是官方的问题。 建议你再多测几次,尤其是环境和mysql版本之类看看是否有问题。 如果确实能复现建议给seata提供详细的环境和版本信息, 例子可以用我的示例改改提交给他们看看,

terminux commented 4 years ago

我当时测试似乎没这个问题,我的例子也是抄的官方的。 所以如果有问题也肯定是官方的问题。 建议你再多测几次,尤其是环境和mysql版本之类看看是否有问题。 如果确实能复现建议给seata提供详细的环境和版本信息, 例子可以用我的示例改改提交给他们看看,

找到原因了,是数据源自动代理配置冲突的问题,如果配置了:

spring:
  datasource:
    dynamic:
      seata: true