继上一篇ShardingSphere分表分库一之后,现在我们在说一下分表分库中的事务处理,这里我们使用的是数据库支持的XA事务,当然也可以使用柔性分布式事务,如使用Seata。
XA是一种分布式事务规范,与之对应的是JAVA平台上的事务规范JTA(Java Transaction Api)。JTA定义了对XA事务的支持,实际上,JTA就是基于XA构建的。但是JTA只是相当于一组结构,定义了分布式事务的处理方式,具体实现还是需要由各个厂商提供。
目前JTA有两种实现方式,一种是由特定的J2EE容器提供,例如这里提到的 narayana 就是由JBOSS提供的。另一种就是适用于所有J2EE的通用规范,例如Atomokios,他是ShardingSphere默认使用的事务管理器。
在POM文件内加入shardingsphere xa事务支持的引用:
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-transaction-xa-core</artifactId>
<version>${shardingsphere.version}</version>
</dependency>
添加XA事务配置。
@Configuration
@EnableTransactionManagement
public class ShardingTransactionXAConfig {
@Bean
public PlatformTransactionManager txManager(final DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}