spring的事务传播及其底层原理
REQUIRED:如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。Spring的默认事务传播类型
SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行
MANDATORY:使用当前的事务,如果当前没有事务,就抛出异常
REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起(暂停)
NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起
NEVER:以非事务方式执行,如果当前存在事务,则抛出异常
NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作
事务不生效的一些原因
mysql存储引擎设置必须为inodb
@Transactional必须加在接口的实现类上,不能加在接口上
类的内部方法调用不生效
必须抛出异常才可以进行回滚操作,如果dao方法中catch了异常,则不会回滚