Spring声明式事务传播机制与@Transaction应该写在哪里
1.事务的特性
| 特性 | 含义 | 
| 原子性 | 事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用。 | 
| 一致性 | 一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败。在现实中的数据不应该被破坏。 | 
| 隔离性 | 可能有许多事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏。 | 
| 持久性 | 一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响,这样就能从任何系统崩溃中恢复过来。通常情况下,事务的结果被写到持久化存储器中。 | 
2.Spring声明式事务的可选属性
| 属性 | 描述 | 
| value | 可选的限定描述符,指定使用的事务管理器 | 
| propagation | 可选的事务传播行为设置 | 
| isolation | 可选的事务隔离级别设置 | 
| readOnly | 读写或只读事务,默认读写 | 
| timeout | 事务超时时间设置 | 
| rollbackFor | 导致事务回滚的异常类数组 | 
| rollbackForClassName | 导致事务回滚的异常类名字数组 | 
| oRollbackFor | 不会导致事务回滚的异常类数组 | 
| noRollbackForClassName | 不会导致事务回滚的异常类名字数组 | 
3.事务的传播机制 propagation
| 传播机制 | 含义 | 
| PROPAGATION_REQUIRED | Spring默认的传播机制,能满足绝大部分业务需求,如果外层有事务,则当前事务加入到外层事务,一块提交,一块回滚。如果外层没有事务,新建一个事务执行 | 
| PROPAGATION_REQUES_NEW | 该事务传播机制是每次都会新开启一个事务,同时把外层事务挂起,当当前事务执行完毕,恢复上层事务的执行。如果外层没有事务,执行当前新开启的事务即可 | 
| PROPAGATION_SUPPORT | 如果外层有事务,则加入外层事务,如果外层没有事务,则直接使用非事务方式执行。完全依赖外层的事务 | 
| PROPAGATION_NOT_SUPPORT | 该传播机制不支持事务,如果外层存在事务则挂起,执行完当前代码,则恢复外层事务,无论是否异常都不会回滚当前的代码 | 
| PROPAGATION_NEVER | 该传播机制不支持外层事务,即如果外层有事务就抛出异常 | 
| PROPAGATION_MANDATORY | 与NEVER相反,如果外层没有事务,则抛出异常 | 
| PROPAGATION_NESTED | 该传播机制的特点是可以保存状态保存点,当前事务回滚到某一个点,从而避免所有的嵌套事务都回滚,即各自回滚各自的,如果子事务没有把异常吃掉,基本还是会引起全部回滚的。 | 
4.事务的隔离级别 isolation
| 传播机制 | 含义 | 
| ISOLATION_DEFAULT | 使用后端数据库默认的隔离级别 | 
| ISOLATION_READ_UNCOMMITTED | 允许读取尚未提交的更改。可能导致脏读、幻读或不可重复读。 | 
| ISOLATION_READ_COMMITTED | (Oracle 默认级别)允许从已经提交的并发事务读取。可防止脏读,但幻读和不可重复读仍可能会发生。 | 
| ISOLATION_REPEATABLE_READ | (MYSQL默认级别)对相同字段的多次读取的结果是一致的,除非数据被当前事务本身改变。可防止脏读和不可重复读,但幻读仍可能发生。 | 
| ISOLATION_SERIALIZABLE | 完全服从ACID的隔离级别,确保不发生脏读、不可重复读和幻影读。这在所有隔离级别中也是最慢的,因为它通常是通过完全锁定当前事务所涉及的数据表来完成的。 | 
什么是脏读、不可重复读和幻影读
- 脏读
 脏读发生在一个事务读取了被另一个事务改写但尚未提交的数据时。如果这些改变在稍后被回滚了,那么第一个事务读取的数据就会是无效的。
- 不可重复读
 不可重复读发生在一个事务执行相同的查询两次或两次以上,但每次查询结果都不相同时。这通常是由于另一个并发事务在两次查询之间更新了数据。
- 幻读
 幻读和不可重复读相似。当一个事务(T1)读取几行记录后,另一个并发事务(T2)插入了一些记录时,幻读就发生了。在后来的查询中,第一个事务(T1)就会发现一些原来没有的额外记录。
5.@Transaction应该被写在哪里
总结:推荐使用在service的实现类的方法上
原因详解可见如下博客:
参考博客:https://blog.csdn.net/Code_Flyer/article/details/104189615
https://blog.csdn.net/bntX2jSQfEHy7/article/details/79040349