Spring事务隔离级别

  与数据库隔离级别一致,默认隔离级别与连接的数据库隔离级别相同

 

Spring事务的两种实现方式

编程式事务

    编程式事务是侵入性事务管理,使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。

声明式事务(@Transactional)

    建立在AOP之上,其本质是对方法前后进行拦截,在目标方法开始之前创建或加入一个事务,在执行完成目标方法后根据执行情况提交或回滚事务。

    声明式事务使用:第一步,开启支持@EnableTransactionManagement;第二步,在需要事务管理的服务层添加@Transactional。

    注意:

  • @Transactional只能用在public方法上。
  • @Transactional标注的方法如果时非运行时异常,则不会回滚。
  • 如果我们往上抛Exception异常(非运行时异常),我们可以指定rollbackFor属性来回滚。

 

@Transactional常用参数

propagation:事务传播行为

  • REQUIRED,Spring的默认传播行为,若当前存在事务,则加入当前事务;若当前不存在事务,则创建一个新事物。
  • REQUIRES_NEW,创建一个新事务,若当前存在事务,则把当前事务挂起。
  • SUPPORTS,若存在当前事务,则加入当前事务;若当前不存在事务,则以非事务的方式继续运行。
  • NOT_SUPPORTS,以非事务的方式运行,若当前存在事务,则把当前事务挂起。
  • NEVER,以非事务的方式运行,若当前存在事务,则抛出异常。
  • MANDATORY,若存在当前事务,则加入当前事务;若当前不存在事务,则抛出异常。
  • NESTED,若存在当前事务,则创建一个事务作为当前事务的嵌套事务运行;若当前不存在事务,则相当于REQUIRED传播。

isolation:事务隔离级别

  • 与数据库隔离级别划分方式相同,默认DEFAULT采用数据库的隔离级别。

timeout:事务超时时间,默认-1

  • 设置超时时间,若超时,则回滚。默认-1,表示不超时。

read-only:是否只读,默认false

rollbackFor:指定能触发事务回滚的异常类型

noRollbackFor:指定不需要事务回滚的异常类型