spring 事务整理

事务特性

原子性(Atomicity)

一个事务中的所有操作要么全部成功,要么全部失败

一致性(Consistency)

应用系统数据与数据库保持一致,事务成功应用系统保存最新的数据,事物异常失败回滚到事务之前的数据

隔离性(Isolation)

并发情况中同事操作相同的数据,再事务未提交前,每个并发事务中修改的数据都不会影响到其他线程中的事务数据

持久性(Durability)

只要事务提交成功,对数据库的数据操作会保存下来,及时系统崩溃或重启数据库也不影响

 

事务的传播特性

(1)propagation_requierd:如果当前没有事务,就新建一个事务,如果已存在一个事务中,加入到这个事务中,这是Spring默认的选择。

(2)propagation_supports:支持当前事务,如果没有当前事务,就以非事务方法执行。

(3)propagation_mandatory:使用当前事务,如果没有当前事务,就抛出异常。
(4)propagation_required_new:新建事务,如果当前存在事务,把当前事务挂起。
(5)propagation_not_supported:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
(6)propagation_never:以非事务方式执行操作,如果当前事务存在则抛出异常。
(7)propagation_nested:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与propagation_required类似的操作。

 

事务隔离级别

(1)read uncommited:是最低的事务隔离级别,它允许另外一个事务可以看到这个事务未提交的数据。
(2)read commited:保证一个事物提交后才能被另外一个事务读取。另外一个事务不能读取该事物未提交的数据。
(3)repeatable read:这种事务隔离级别可以防止脏读,不可重复读。但是可能会出现幻象读。它除了保证一个事务不能被另外一个事务读取未提交的数据之外还避免了以下情况产生(不可重复读)。
(4)serializable:这是花费最高代价但最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读之外,还避免了幻象读

 

事务隔离情况描述

a.脏读:指当一个事务正字访问数据,并且对数据进行了修改,而这种数据还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据还没有提交那么另外一个事务读取到的这个数据我们称之为脏数据。依据脏数据所做的操作肯能是不正确的。
b.不可重复读:指在一个事务内,多次读同一数据。在这个事务还没有执行结束,另外一个事务也访问该同一数据,那么在第一个事务中的两次读取数据之间,由于第二个事务的修改第一个事务两次读到的数据可能是不一样的,这样就发生了在一个事物内两次连续读到的数据是不一样的,这种情况被称为是不可重复读。
c.幻象读:一个事务先后读取一个范围的记录,但两次读取的纪录数不同,我们称之为幻象读(两次执行同一条 select 语句会出现不同的结果,第二次读会增加一数据行,并没有说这两次执行是在同一个事务中)

 

事务实现的方式

(1)编程式事务管理:在代码中调用beginTransaction()、commit()、rollback()等事务管理相关的方法
(2)基于 TransactionProxyFactoryBean的声明式事务管理

  • 参考资料:https://blog.csdn.net/cpp_lzth/article/details/6551639

(3)基于 @Transactional 的声明式事务管理

  • 参考资料:https://www.cnblogs.com/leeego-123/p/11498327.html

(4)基于Aspectj AOP配置事务

  • @Before 前置通知
  • @AfterReturning 后置通知
  • @Around 环绕通知
  • @AfterThrowing 抛出通知
  • @After 最终通知

你可能感兴趣的:(Spring,java)