1. 问题
分库分表多数据源如何支持分布式事务
2. jar引入
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.10</version> </dependency> <!-- mybatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.0</version> </dependency>
<dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-jdbc-spring-boot-starter</artifactId> <version>4.0.0-RC3</version> </dependency> <dependency> <groupId>io.shardingsphere</groupId> <artifactId>sharding-transaction-spring-boot-starter</artifactId> <version>3.1.0</version> </dependency>
3. sharding配置
见之前的文章
4. 添加@EnableTransactionManagement注解
@EnableTransactionManagement @SpringBootApplication(scanBasePackages = "com.example.shard") public class ShardJdbcApplication {
5. Service方法添加注解
@ShardingTransactionType(TransactionType.XA) @Transactional(rollbackFor = Exception.class) @Override public int insert(AppAuthRegister record1, AppAuthRegister record2) { this.getSqlSessionTemplate() .insert("com.example.shard.mapper.AppAuthRegisterMapper.insert", record1); this.getSqlSessionTemplate() .insert("com.example.shard.mapper.AppAuthRegisterMapper.insert", record2); System.out.println(100 / 0);//测试回滚,统一提交的话,将这行注释掉就行了 return 1; }
测试发现,回滚操作成功执行