spring事务传播机制及事务失效

108 阅读1分钟

REQUIRED(Spring默认的事务传播机制)

若A方法中没有事务B方法中有事务,B会新建一个事务;如果A方法有事务并且B方法也有事务,那么B方法就会加入到A方法执行一个事务(例如A,B方法各有一条sql语句,这两个语句就变成一条语句,要么都成功要么都失败)

SUPPORTS(支持)

如果当前方法有事务就执行当前事务,如果没事务就以非事务方式执行(如果A中有事务,则B方法的事务加入A事务中,成为一个事务(一起成功,一起失败),如果A中没有事务,那么B就以非事务方式运行)

REQUIRES_NEW(新建) :各个方法的事务相互独立(A方法事务抛出异常回滚不影响B方法的事务)

MANDATORY(强制性的)

NOT_SUPPORTED(不支持)

NEVER(从不)

NESTED(嵌套的)

spring的事务是基于aop的环绕通知机制,非事务方法调用事务方法会导致事务失效,解决办法就是通过创建CGLIB代理对象去调用事务方法

权限修饰符不是public的方法,事务也会失效,还有数据库的存储引擎本身不支持事务;例如mysql的myisam