spring事务
四个性质
1.一致性:强调事务的不可分割.
2.原子性:事务的执行的前后数据的完整性保持一致.
3.隔离性:一个事务执行的过程中,不应该受到其他事务的干扰
4.持久性:事务一旦结束,数据就持久到数据库
五种隔离级别
1.Default:使用数据库默认的事务隔离级别
2.Read_uncommited:未提交读,:脏读,不可重复读,虚读都有可能发生
3.Read_conmmited:已提交读,不可重复读,虚读都有可能发生
4.Repeatable_read:可重复读 虚读都有可能发生
5.Serializeble:串化,锁表
七种传播行为
什么是传播行为:当一个事务调用两一个事务时,即A方法调用B方法时,并且A、B方法都具有事务的隔离级别,那么这现象就叫做传播行为。
Spring 支持 7 种事务传播行为(Transaction Propagation Behavior):
(1)必须有事务
PROPAGATION_REQUIRED :如果没有,就开启一个事务;如果有,就加入当前事务(方法B看到自己已经运行在 方法A的事务内部,就不再起新的事务,直接加入方法A)
RROPAGATION_REQUIRES_NEW :如果没有,就开启一个事务;如果有,就将当前事务挂起。(方法A所在的事务就会挂起,方法B会起一个新的事务,等待方法B的事务完成以后,方法A才继续执行)
PROPAGATION_NESTED:如果没有,就开启一个事务;如果有,就在当前事务中嵌套其他事务
PROPAGATION_MANDATORY:如果没有,就抛出异常;如果有,就使用当前事务
(2)事务可有可无
PROPAGATION_SUPPORTS: 如果没有,就以非事务方式执行;如果有,就加入当前事务(方法B看到自己已经运行在 方法A的事务内部,就不再起新的事务,直接加入方法A)
(3)不需要事务
PROPAGATION_NOT_SUPPORTED :如果没有,就以非事务方式执行;如果有,就将当前事务挂起,(方法A所在的事务就会挂起,而方法B以非事务的状态运行完,再继续方法A的事务)
PROPAGATION_NEVER :如果没有,就以非事务方式执行;如果有,就抛出异常。
小计
① 在多线程中配置事务的隔离级别,和传播特性之后,在产生事务挂起的情况时,会产生死锁,这时候需要配置超时时间,以便尽快熔断。
② 在同一个类里面,如果事务A方法通过this调用方法B事务时,在不同的情况下可能会出现,B方法的事务不会被切入进去,这时候可以将这个类暴露出去,在事务A中通过类来来调用事务B。
③ 方法A有事务,方法B没有事务,方法A调用方法B,B加入A的事务中。