分布式事务

引入Maven依赖

  1. <dependency>
  2. <groupId>io.shardingsphere</groupId>
  3. <artifactId>sharding-transaction-2pc-xa</artifactId>
  4. <version>${shardingsphere.version}</version>
  5. </dependency>

XA事务管理器将以SPI的方式被Sharding-JDBC所加载。

连接池配置

ShardingSphere支持将普通的数据库连接池,转换为支持XA事务的连接池,对HikariCP, Druid和DBCP2连接池内置支持,无需额外配置。其它连接池需要用户实现DataSourceMapConverter的SPI接口进行扩展,可以参考io.shardingsphere.transaction.xa.convert.swap.HikariParameterSwapper的实现。若ShardingSphere无法找到合适的实现,则会按默认的配置创建XA事务连接池。默认属性如下:

属性名称默认值
connectionTimeoutMilliseconds30 1000
idleTimeoutMilliseconds60 1000
maintenanceIntervalMilliseconds30 * 1000
maxLifetimeMilliseconds0 (无限制)
maxPoolSize50
minPoolSize1

事务类型切换

ShardingSphere的事务类型存放在TransactionTypeHolder的本地线程变量中,因此在数据库连接创建前修改此值,可以达到自由切换事务类型的效果。

注意:数据库连接创建之后,事务类型将无法更改。

API方式

  1. TransactionTypeHolder.set(TransactionType.LOCAL);

  1. TransactionTypeHolder.set(TransactionType.XA);

SpringBootStarter使用方式

引入Maven依赖:

  1. <dependency>
  2. <groupId>io.shardingsphere</groupId>
  3. <artifactId>sharding-transaction-spring-boot-starter</artifactId>
  4. <version>${sharding-sphere.version}</version>
  5. </dependency>

SpringBoot使用方式

引入Maven依赖:

  1. <dependency>
  2. <groupId>io.shardingsphere</groupId>
  3. <artifactId>sharding-transaction-spring</artifactId>
  4. <version>${sharding-sphere.version}</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter-aop</artifactId>
  9. <version>${spring-boot.version}</version>
  10. </dependency>
  11. <spring-boot.version>[1.5.0.RELEASE,2.0.0.M1)</spring-boot.version>

AutoConfiguration配置

  1. @SpringBootApplication(exclude = JtaAutoConfiguration.class)
  2. @ComponentScan("io.shardingsphere.transaction.aspect")
  3. public class StartMain {
  4. }

Spring Namespace使用方式

引入Maven依赖:

  1. <dependency>
  2. <groupId>io.shardingsphere</groupId>
  3. <artifactId>sharding-transaction-spring</artifactId>
  4. <version>${sharding-sphere.version}</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.aspectj</groupId>
  8. <artifactId>aspectjweaver</artifactId>
  9. <version>${aspectjweaver.version}</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>org.springframework</groupId>
  13. <artifactId>spring-context-support</artifactId>
  14. <version>${springframework.version}</version>
  15. </dependency>
  16. <aspectjweaver.version>1.8.9</aspectjweaver.version>
  17. <springframework.version>[4.3.6.RELEASE,5.0.0.M1)</springframework.version>

加载切面配置信息

  1. <import resource="classpath:META-INF/shardingTransaction.xml"/>

业务代码

在需要事务的方法或类中添加相关注解即可,例如:

  1. @ShardingTransactionType(TransactionType.LOCAL)
  2. @Transactional

  1. @ShardingTransactionType(TransactionType.XA)
  2. @Transactional

注意:@ShardingTransactionType需要同Spring的@Transactional配套使用,事务才会生效。

Atomikos参数配置

ShardingSphere默认的XA事务管理器为Atomikos。可以通过在项目的classpath中添加jta.properties来定制化Atomikos配置项。具体的配置规则请参考Atomikos的官方文档