1——在@Transactional注解中,可以配置事务相关参数
(1)propagation:事务传播行为:
多事务方法之间进行调用,这个过程中事务是怎样进行管理的
1.1——Spring事务传播行为有7种
1.1.1——REQUIRED:
如果当前有事务在运行,当前方法就在这个事务内运行,否则就启动(创建)一个新的事务,并且自己在这个事务内运行
1.1.2——REQUIRED_NEW:
当前的方法使用时,必须启动新事务,并在新事务内运行,如果有事务在运行,应该将运行中的事务挂起
(2)isolation:事务隔离级别——为解决事务隔离性问题而生
(2.1)事务的隔离性:多事务操作之间不会产生影响,不考虑隔离性会产生很多问题:脏读,不可重复读,虚(幻)读
(2.1.1) 脏读:多事务之间,一个未提交的事务,读取到了另一个事务回滚前的数据
(2.1.2)不可重复读:多事务之间,一个未提交的事务在进行第二次读取数据时,读取到了一个事务已提交的数据
例子:在事务A中,读取到张三的工资为5000,操作没有完成,事务还没提交。
与此同时,
事务B把张三的工资改为8000,并提交了事务。
随后,
在事务A中,再次读取张三的工资,此时工资变为8000。在一个事务中前后两次读取的结果并不致,导致了不可重复读
(2.1.3)虚读:一个未提交事务读取到另一提交事务添加的数据
例子:
目前工资为5000的员工有10人,事务A读取所有工资为5000的人数为10人。
此时,
事务B插入一条工资也为5000的记录。
这是,事务A再次读取工资为5000的员工,记录为11人。此时产生了幻读。
(2.2)事务的隔离级别:有五种
(3)timeout:超时时间:
事务需要在一定时间内进行提交,如果超时,需要进行事务回滚
默认值时-1,设置的时间是以秒为单位的
(4)readOnly:是否只读:
读:查询操作,写:添加,修改,删除操作
readOnly:默认值是false,既可以查询,也可以进行添加,修改,删除操作
(5)rollbackFor:回滚
设置出现哪些异常时,进行事务的回滚,
添加方法,rollbackFor = 异常名称.class
(6):noRollbackFor:不回滚
设置出现哪些异常时,不进行事务的回滚
添加方法,noRollbackFor = 异常名称.class