1.本地事务
本地事务:本地事务其实就是说的是我们传统的单体服务下的数据库事务
事务的四大特性:
A(Atomic):原子性,构成事务的所有操作,要么都执行完成,要么全部不执行,不可能出现部分成功部分失 败的情况。
C(Consistency):一致性,在事务执行前后,数据库的一致性约束没有被破坏。
I(Isolation):隔离性,数据库中的事务一般都是并发的,隔离性是指并发的两个事务的执行互不干扰,一个事 务不能看到其他事务运行过程的中间状态。通过配置事务隔离级别可以避脏读、重复读等问题。
D(Durability):持久性,事务完成之后,该事务对数据的更改会被持久化到数据库,且不会被回滚。
一般我们都是采用spring框架进行开发,所以一般情况都是spring帮我们代理了数据库的事务,比如我们常见的在业务层加上@Transactional注解标识开启事务。
在项目中,@Transactional(rollbackFor=Exception.class),如果类加了这个注解,那么这个类里面的方法抛出异常,就会回滚,数据库里面的数据也会回滚。
在@Transactional注解中如果不配置rollbackFor属性,那么事物只会在遇到RuntimeException的时候才会回滚,加上rollbackFor=Exception.class,可以让事物在遇到非运行时异常时也回滚
如果某方法加了@Transactional(notRollbackFor=RunTimeException.class)这个注解,那么该方法在运行时异常不会回滚。
属性解释
属性 类型 描述
value String 可选的限定描述符,指定使用的事务管理器
propagation enum: Propagation 可选的事务传播行为设置
isolation enum: Isolation 可选的事务隔离级别设置
readOnly boolean 读写或只读事务,默认读写
timeout int (in seconds granularity) 事务超时时间设置
rollbackFor lass对象数组,必须继承自Throwable 导致事务回滚的异常类数组
rollbackForClassName 类名数组,必须继承自Throwable 导致事务回滚的异常类名字数组
noRollbackFor Class对象数组,必须继承自Throwable 不会导致事务回滚的异常类数组
noRollbackForClassName 类名数组,必须继承自Throwable 不会导致事务回滚的异常类名字数组
2.分布式事务
Alibaba Seata
为阿里开源分布式事务解决方案,对业务代码入侵很小,其核心就是一个注解" @GlobalTransactional ",Seata有3个基本组成部分: