当您在使用 GTS 时,需要关注相关的注意事项。

GTS 事务分组应与业务系统在同一个地域

GTS 不支持跨地域访问。创建事务分组时,需要选择和业务系统相同的地域,否则使用时会显示连不上 GTS Server

GTS 注解方法的调用

建议在当前方法中直接实例化 @TxcTransaction 注解的方法类,并直接调用,保证 GTS 事务生效,且代码直观。

GTS 注解方法的调用包含以下三点注意事项:

  • 带有 @TxcTransaction 注解的方法可以在其他的类中被调用,但需要显式的指定的 Spring bean 实例。
  • 如果 @TxcTransaction 注解方法在本类的其他方法中被调用,需要显式指定实例。
  • 开启事务只能直接调用使用 Spring bean 实例化的类的@TxcTransaction注解方法。

示例如下。

class SampleClient { /* 此类已经被声明为Spring bean */
    //此方法被声明为GTS事务
    @TxcTransaction(timeout = 60000)
    void dataUpdate(Connection con1, Connection con2) {        
        // 操作数据源con
        update1(con1);
        update2(con2);
    }
    public void callUpdate1(Connection con1, Connection con2){
        dataUpdate(con1,con2);
    }
    public void callUpdate2(Connection con1, Connection con2, SampleClient clienttest){
        clienttest.dataUpdate(con1,con2);
    }
    public static void main(String[] args){
        SampleClient clienttest1 = (SampleClient)context.getBean("clientTest");
        Connection con1=getCon1();
        Connection con2=getCon2();
        clienttest1.dataUpdate(con1,con2);// 这个是正确的调用,最佳实践
        SampleClient clienttest2 = new SampleClient();
        clienttest2.dataUpdate(con1,con2);// 这个是错误的调用,不能开启GTS事务
        clienttest1.callUpdate1(con1,con2); // 这个是错误的调用,不能开启GTS事务
        clienttest1.callUpdate2(con1,con2, clienttest1);// 这个是正确的调用,但是不推荐使用
    }
}
class UseSampleClient {
    void updateSampleClient(){
        SampleClient clienttest1 = (SampleClient)context.getBean("clientTest");
        clienttest1.dataUpdate(con1,con2);// 这个是正确的调用,最佳实践
        SampleClient clienttest2 = new SampleClient();
        clienttest2.dataUpdate(con1,con2);// 这个是错误的调用,不能开启GTS事务
    }
}           

AT 模式注意事项

AT 模式注意事项请参见AT 模式接入注意事项

TCC 模式注意事项

TCC 模式注意事项请参见TCC 模式接入注意事项

SAE 环境注意事项

非公网测试环境(线上正式环境)需要配置 URL 参数 https://cs2.gts.aliyuncs.com。

  • 使用 txc-client.jar
    <bean class="com.taobao.txc.client.aop.TxcTransactionScaner">
            <constructor-arg value="myapp"/><!-- 应用自定义的标识 -->
            <constructor-arg value="mygroup.xxxx.xx"/><!-- 事务分组(全名) -->
            <constructor-arg type="int" value="1"/>
            <constructor-arg value="https://cs2.gts.aliyuncs.com"/>
            <property name="accessKey" value="xxx"/>
            <property name="secretKey" value="xxx"/>
    </bean>
  • 使用 txc-client-springcloud.jar

    在 properties 配置文件添加 spring.cloud.txc.url=https://cs2.gts.aliyuncs.com。