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