spring——事务管理(10分钟从入门到入土)

事务管理

1.1 回顾事务

什么是事务 在数据库开发中,一组业务逻辑操作,要么全部成功,要么全部失败。 事务有什么特定?ACID 原子性:整体,原子不可分割的。整个操作被看成一个整体,要么成功,要么失败。 一致性:数据,事务操作的前后数据一致。 隔离性:并发,两个事务之间并发访问情况。 持久性:结果,事务一旦提交,不能回滚。 隔离有什么问题? 脏读:一个事务读到了另一个事务没有提交的数据。 不可重复读:一个事务读到了另一个事务已有提交的数据(update)。 幻读:一个事务读到了另一个事务已有提交的数据(insert)。 隔离级别有那些? 读未提交:存在3个问题(脏读、不可重复读、幻读) 读已提交:解决1个问题(脏读),存在2个问题(不可重复读、幻读) 可重复读:解决2个问题(脏读、不可重复读)、存在1个问题(幻读) 串行化:解决3个问题(脏读、不可重复读、幻读)–单事务

1.2 事务详解

研究Spring事务,需要学习事务管理平台管理器: PlatformTransactionManager – 在平台管理器中,通过事务的定义获得事务,从而进行事务提交或回滚操作。 事务定义 TransactionDefinition 的详解:

传播行为:一个事务调用另一个事务,事务共享问题。

  1. PROPAGATION_REQUIRED,required:支持当前事务,如果没有事务,创建一个新的。 A 有事务,B使用A的事务。(支持当前事务) A没有事务,B创建新的。()
  2. PROPAGATION_SUPPORTS,supports:支持当前事务,如果没有事务,以非事务执行。 A 有事务,B使用A的事务。(支持当前事务) A没有事务,B以非事务执行。
  3. PROPAGATION_MANDATORY,mandatory:支持当前事务,如果没有事务,抛异常 A 有事务,B使用A的事务。(支持当前事务) A没有事务,B抛异常。
  4. PROPAGATION_REQUIRES_NEW,requires_new:创建一个新事物,如果当前有事务,将挂起。 A 有事务,B创建新事务,同时挂起A事务。 A 没有事务,B创建新事务。
  5. PROPAGATION_NOT_SUPPORTED, not_supported:不支持当前事务,以非事务执行,如果有挂起 A 有事务,B以非事务执行,同时挂起A事务。 A 没有事务,B以非事务执行。
  6. PROPAGATION_NEVER, never:不支持当前事务,如果有抛异常。 A 有事务,B抛异常 A 没有事务,B以非事务执行。
  7. PROPAGATION_NESTED, nested :嵌套事务,底层使用savepoint进行嵌套事务操作。 保存点允许回顾部分事务。
经验分享 程序员 微信小程序 职场和发展