问题:
分布式事务没有回滚,不报错。
详细描述:
一、我使用Spring Cloud+OpenFeign+JPA+Seata,没有问题,无论如何数据都是正常回滚的;
我使用Spring Cloud+OpenFeign+JPA+Sharding jdbc,也是正常的,只不过分布式事务会有问题
二、当我加入Sharding jdbc(sharding-jdbc-spring-boot-starter 4.1.1),与一当中有如下不同:
1、在一当中,增加了一个DataSourceConfiguration,整合shardingjdbc后,不使用这个配置:
@Configuration
public class DataSourceConfiguration {
@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource druidDataSource(){
DruidDataSource druidDataSource = new DruidDataSource();
return druidDataSource;
}
/**
* 需要将 DataSourceProxy 设置为主数据源,否则事务无法回滚
*
* @param druidDataSource The DruidDataSource
* @return The default datasource
*/
@Primary
@Bean("dataSource")
public DataSource dataSource(DruidDataSource druidDataSource) {
return new DataSourceProxy(druidDataSource);
}
}
2、在application.yml中修改了相关的数据库配置(按sharding jdbc的方式修改)
3、在服务间调用的方法上,原来使用的是:@GlobalTransactional,现在使用的是:@Transactional @ShardingTransactionType(value = TransactionType.BASE)
业务逻辑:
调用服务A中的方法,在服务A中,首先调用服务B的方法,插入数据,然后在A中的方法中再插入数据,最好抛出一个异常。
预期效果:
正常情况下,当A中的方法抛出异常后,服务B和服务A中都会回滚
实际效果:
A服务中的数据回滚了,但B服务中没有回滚
按照网上说的,在A服务中增加一个配置如下,但也没有回滚数据:
@Configuration
@EnableTransactionManagement
public class TransactionConfig {
@Bean
public PlatformTransactionManager txManager(final DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
搞了三天了,实在没办法
PS:Seata使用的是1.4版本,没有注册中心使用eureka,配置中心没有变,使用的是file