一.事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)
以事务方式运行,是说如果执行多条SQL语句,则要么都成功,要么都失败
以非事务方式运行,是说如果执行多条SQL语句,彼此没有关系
例如
执行以下三条语句
SQL1
SQL2
SQL3
执行三条语句是1、2成功了,3失败了
如果是事务方式:则1、2的执行结果会被撤销,即三条语句都不成功
如果是非事务方式:则1、2执行成功,3失败!
二.七种配置的意思
下面是Spring中Propagation类的事务属性详解:
REQUIRED:支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。
MANDATORY:支持当前事务,如果当前没有事务,就抛出异常。
REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起。
NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
NESTED:支持当前事务,如果当前事务存在,则执行一个嵌套事务,如果当前没有事务,就新建一个事
三.REQUIRED和REQUIRES_NEW的区别
1.a方法调用b方法,b方法注解REQUIRES_NEW时,b方法的事物独立于a方法;
2.b方法事物失败,则a失败;a方法事物失败,b不一定失败
四.
RollbackFor = Exception.class 方法发生异常,回滚到方法初始执行状态
noRollbackFor = Exception.class 方法发生异常,不回滚