@Transactional 注解详解

说到数据库,我们就会想到事务,在spring或springboot等框架中,关系到数据库的增删改时,也都会使用@Transactional 注解来表示事务的开启,下面说说@Transactional 注解的详情介绍:
1.首先就是引入@Transactional
可以放在类上,表示全部方法开启事务,也可放在某个方法上面,表示这个方法开启事务,一般都放在service层里
@Transactional 注解详解
2.我们看看此注解的重要参数

@Transactional 注解详解
各个参数详解:
1. propagation
事务传播行为:多事务方法之间相互调用,这个过程中事务是如何管理的问题(例如两个事务调用对方方法,事务该如何选择)
里面有多个选择:

@Transactional 注解详解
REQUIRED:如果有事务运行,当前方法就在这个事务内运行,否则,就启动一个新的事务,并在自己的事务内运行;

NOT_SUPPORTED:当前的方法不应该运行在事务中,如果有运行的事务,将它挂起。

REQUIRES_NEW:当前方法必须启动新事务,并在它自己的事务内运行,如果有事务正在运行,应该将它挂起。

MANDATORY:当前的方法必须运行在事务内部,如何没有正在运行的事务,就抛出异常。

SUPPORTS:如果有事务在运行,当前的方法就在这个事务内运行,否则它可以不运行在事务中。

NEVER:前的方法不应该运行在事务中,如果有运行的事务,就抛出异常。

NESTED:如果有事务在运行,当前的方法就应该在这个事务的嵌套事务内运行,否则,就启动一个新的事务,并在它自己的事务内运行。

2. isolation
事务隔离级别:为什么会有事务隔离这种说法呢,因为它可能会导致脏读、不可重复读,虚读(幻读)

@Transactional 注解详解
此时需要设置事务隔离级别来避免这种情况:

@Transactional 注解详解@Transactional 注解详解其中MySQL默认隔离级别为REPEATABLE-READ(可重复读)

3. timeout
超时时间:事务需要在一定的时间内提交,不提交则进行回滚;默认值是-1,表示无时间限制

4. readOnly
是否只读:
(1).默认值为false,表示可以查询,可以增删改;
(2).如果设置为true,只能查询操作。

5.rollbackFor:
回滚:设置出现哪些异常进行事务回滚。

6.noRollbackFor:
不回滚:设置出现哪些异常不进行回滚。