瞎掰事务(二):spring事务

瞎掰事务(二)spring事务

事务的定义

上文中从数据库,spring 框架和系统三个层级的角度解析了事务的四大特性。每个层级都有对事务的处理机制和定义:数据库完成了事务持久性和隔离性。

持久性主要通过存储引擎和redo 日志

隔离性即并发控制,不同的隔离级别下使用的锁技术细节不同,不同的隔离级别之下业务系统所要的编码约束也应不同

原子性和autocommit 的参数设置

在spring 的眼里,事务是什么。spring 的所承担的事务的原子性一方面在与控制autocommit 的设置,另一方面是异常处理链。这是我对spring事务的新定义。
异常链:
异常的处理链:

一致性是从上至下贯穿业务系统到数据库相关。而受开发人员控制的只有业务系统层级。正确的一致性即正确的使用了spring的异常处理链条。

事务的扩展

传播行为

个数 是否支持当前事务 是否新建事务处理
PROPAGATION_MANDORY 支持当前事务,如果当前没有事务,就抛出异常 1 Y 同步当前 Y 没有当前,则新建
PROPAGATION_REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起 1或2 挂起当前,新建 Y 没有当前,则新建
PROPAGATION_REQUIRED 支持当前事务,如果当前没有事务,就新建一个事务。这是默认的的选择。 1 Y 同步当前 Y 没有当前,则新建
PROPAGATION_NESTED 如果当前存在事务,则在嵌套事务内执行。否则,它看起来和 PROPAGATION_REQUIRED 看起来没什么俩样 1 Y 保留savePoint,新建  
PROPAGATION_SUPPORT 支持当前事务,如果当前没有事务,就以非事务方式执行 0或1 Y 同步当前  
PROPAGATION_NOT_SUPPORT 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起 0或ERROR 挂起当前

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章