Closed terminux closed 4 years ago
我当时测试似乎没这个问题,我的例子也是抄的官方的。 所以如果有问题也肯定是官方的问题。 建议你再多测几次,尤其是环境和mysql版本之类看看是否有问题。 如果确实能复现建议给seata提供详细的环境和版本信息, 例子可以用我的示例改改提交给他们看看,
我当时测试似乎没这个问题,我的例子也是抄的官方的。 所以如果有问题也肯定是官方的问题。 建议你再多测几次,尤其是环境和mysql版本之类看看是否有问题。 如果确实能复现建议给seata提供详细的环境和版本信息, 例子可以用我的示例改改提交给他们看看,
找到原因了,是数据源自动代理配置冲突的问题,如果配置了:
spring:
datasource:
dynamic:
seata: true
Seata 1.0.0以下版本(含)需要将conf文件配置项 client.support.spring.datasource.autoproxy
设置成 false
(如果配置了 io.seata.rm.datasource.DataSourceProxy
这个 bean
也得摘除调)
Seata 1.1.0开始那个配置项就失效不支持了,改用了 @EnableAutoDataSourceProxy
注解代替,如果加了这个注解去掉就没问题了
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_a
和ds_b
下的undo_log
表对应的记录均会被正常删除实际结果:
业务数据正常,但是
ds_a
下的undo_log
记录可以正常删除,而ds_b
下的undo_log
表里的记录却无法删除,会始终遗留下来,不知道是seata的问题还是多数据源整合的问题