Spring事务机制
1.事务抽象
2.事务传播
PROPAGATION_REQUIRED
默认事务传播机制,若当前存在事务,则加入该事务,若不存在事务,则新建一个事务。
PAOPAGATION_REQUIRE_NEW
不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务。
事务的隔离性,两个事务互不干涉。不是同一个事务了。
若当前没有事务,则新建一个事务。若当前存在事务,则新建一个事务,新老事务相互独立。外部事务抛出异常回滚不会影响内部事务的正常提交。
class C1(){
@Transactional(propagation = Propagation.REQUIRED)
function A(){
C2.B();
}
}
class C2(){
@Transactional(propagation = Propagation.REQUIRE_NEW)
function B(){
do something;
}
}
若A方法抛出异常,不会影响B正常执行。
若B方法抛出异常,B方法内部捕获,A、B都不会回滚。
A、B不可操作同一条记录,因为处于不同事务中,会产生死锁。
PROPAGATION_NESTED
如果当前存在事务,则嵌套在当前事务中执行。如果当前没有事务,则新建一个事务,类似于REQUIRE_NEW。
PROPAGATION_SUPPORTS
事务有就有,没有就没有,以非事务方式进行。
PROPAGATION_NOT_SUPPORTED
以非事务的方式执行,若当前存在事务,则把当前事务挂起。
PROPAGATION_MANDATORY
强制事务执行,若当前不存在事务,则抛出异常
PROPAGATION_NEVER
以非事务的方式执行,如果当前存在事务,则抛出异常。
3.事务隔离
Spring事务管理
声明式事务就是使用注解方式。