手写分布式事务之四定义分布式事务注解

自定义注解

 

案例代码

/**
 * @author wangchao
 * @date 2020-11-27 13:07:21
 */
@Service
public class TTestServiceImpl extends ServiceImpl<TTestMapper, TTest> implements TTestService {
    @Autowired
    TTestFeignClient feignClient;
    @Autowired
    TTest2FeignClient feignClient2;

    @Override
    @TxTransaction(isStart = true)
    @Transactional
    public boolean saveTTest() {
        TTest tTest = new TTest();
        tTest.setName("WC");
        boolean save = this.save(tTest);
        R tx = feignClient.tx();
        R tx1 = feignClient2.tx();
        return save;
    }
}

这里首先自定义分布式事务注解,只要职责是注册事务组,用来执行最后的事务的提交或回滚。

/**
 * @author WangChao
 * @create 2020/11/27 7:29
 */
@Target({ElementType.METHOD, ElementType.TYPE}) //标记方法和类,接口使用
@Retention(RetentionPolicy.RUNTIME)
@Inherited      //类继承关系中,子类会继承父类使用的注解中被@Inherited修饰的注解
@Documented  //给标记注解生成api文档
public @interface TxTransaction {
    /**
     * 是否LCN事务发起方
     * @return true 是:是发起方 false 否:是参与方
     */
    boolean isStart() default false;
}

定义一个aop拦截器,用来拦截此注解。

/**
 * @author WangChao
 * @create 2020/11/27 8:14
 */
@Aspect
@Component
public class TransactionAspect implements Ordered {
    @Autowired
    private TxManagerInterceptor txManagerInterceptor;

    @Around("@annotation(org.tx.anno.TxTransaction)")
    public Object around(ProceedingJoinPoint pj) throws Throwable {
        Object around = txManagerInterceptor.around(pj);
        return around;
    }

    /**
     * 这里设置的是执行顺序,1000表示在所有事务执行完后,在执行这个拦截器。具体可看我的spring-aop文章那节
     * @return
     */
    @Override
    public int getOrder() {
        return 1000;
    }
}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
分布式事务是指跨多个数据库或服务的事务操作,保证数据一致性和可靠性。在 Java 中手写分布式事务可以使用以下几种方式实现: 1. 两阶段提交(2PC):在分布式环境中,协调者(通常是一个中心节点)与参与者(各个分布式节点)进行协调来保证事务的一致性。具体实现中,需要定义协议、消息的传递和处理等。这种方式实现相对复杂,但能够保证数据的强一致性。 2. 补偿事务(TCC):通过预先定义事务的 try、confirm 和 cancel 三个阶段,来实现自动或手动进行事务的补偿。如果某个参与者失败,则可以通过 cancel 阶段回滚之前的操作。这种方式实现相对简单,但可能会引入一定的不一致性。 3. 消息队列:使用消息队列可以将分布式事务拆解为独立的事务操作,并通过消息中间件来保证最终一致性。具体实现中,可以使用事务消息或者可靠消息传递机制,确保消息的可靠传递和处理。 4. 分布式锁:使用分布式锁可以在分布式环境下保证对共享资源的互斥访问。通过获取锁来进行事务操作,可以保证在同一时刻只有一个节点能够执行某个操作,从而保证数据的一致性。 需要注意的是,手写分布式事务比较复杂且易出现问题,建议使用成熟的分布式事务框架或者中间件,如 Spring Cloud、Atomikos、Seata 等来简化开发和保证数据一致性。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值