spring 事务隔离和传播机制的简单理解
一、spring 事务的传播机制(HibernateTransactionManager)
1)、<tx:method name="*" propagation="REQUIRED" /> 如果当前没有事务,就新建一
个事务;如果已存在一个事务,就加入到这个事务中。
2)、<tx:method name="*" propagation="SUPPORTS" /> 支持当前事务,如果当前没有事
务,以非事务方式执行。
3)、<tx:method name="*" propagation="MANDATORY" />使用当前事务,如果当前没有
事务,则抛出异常。
4)、<tx:method name="*" propagation="REQUIRES_NEW" />新建事务,如果当前存在
事务,则把当前事务挂起。
5)、<tx:method name="*" propagation="NOT_SUPPORTED" />以非事务方式执行,如果
当前存在事务,则把当前事务挂起。
6)、<tx:method name="*" propagation="NEVER" />以非事务方式执行,如果当前存在事
务,则抛出异常。
7)、<tx:method name="*" propagation="NESTED" />如果当前存在事务,则在嵌套事务
内执行。如果当前没有事务,则执行 与 PROPAGATION_REQUIRED类似的操作。
二、spring 事务隔离级别(Isolation Level)
1)、Serializable: 事务串行执行,提供严格的事务隔离,它要求事务序列化执行,事务
只能一个接着一个地执行,不能并发执行,资源消耗最大。
2)、Repeatable Read:可重复读取,保证了一个事务不会修改已经由另一个事务读取但未
提交(回滚)的数据,避免了“脏读取”和“不可重复读取”的情况,但是带来了更多的性能损耗。
3)、Read Committed:授权读取,大多数主流数据库的默认事务等级,保证了一个事务不
会读到另一个并行事务已经修改但未提交的数据,避免了“脏读取”。
4)、Read Uncommitted:未授权读取,保证读取过程中不会读到方法数据,隔离级别在于
处理多事务并发问题。该隔离级别可以通过 “排他写锁”实现。事务隔离的最低级别,仅可保证
不读取物理损坏的数据。与 READ COMMITTED 隔离级相反,它允许读取已经被其它用户修
改但尚未提交确定的数据。
5)、隔离级别 更新丢失 脏读取 重复读取 幻读
Read Uncommitted N Y Y Y
Read Committed N N Y Y
Repeatable Read N NNY
Serializable N N N N
--------------------- 本文来自的 CSDN 博客 ,全文地址请点击:
- 1
- 2
前往页