最近公司在重构新系统,比较繁忙的同时我的知识面也在增长,在和同事的交谈中有谈到事务的处理,这里小小记录一下。
事务的回滚:Spring等框架已经帮我们处理好单次数据库操作的事务,但往往业务上有很多场景是需要一个方法内多次操作数据库的。这里举个例子就是订单进件的时候需要同时开启一个绑定业务主键(这里指订单主键)的流程,于是插入订单成功但开启流程不成功的情况下订单列表里就查看不了这条订单的流程了,这个一对一的关系的数据不一致了。所以我们需要在那个方法里面做一下事务处理,用Spring的事务注解
@Transactional(rollbackFor = Exception.class)
可以实现开启流程或插入订单出现异常的时候数据库回滚,当然这时方法要在需要回滚的情况下抛异常。
其他注解也讨论了一下,比如@Transactional(propagation=Propagation.REQUIRES_NEW)
在分布式RPC调用远程方法的时候,如果出现远程调用失败,但是同时也想本地的方法也同样提交事务,这时候就可以使用这个注解来达成想要的效果。
然而这个注解应该用在被远程调用的方法那里。
网友评论