一.事务的传播属性(Propagation)
1.REQUIRED,这个是默认的属性
Support a current transaction, create a new one if none exists.
如果存在一个事务,则支持当前事务。如果没有事务则开启一个新的事务。
被设置成这个级别时,会为每一个被调用的方法创建一个逻辑事务域。如果前面的方法已经创建了事务,那么后面的方法支持当前的事务,如果当前没有事务会重新建立事务。
2.MANDATORY
Support a current transaction, throw an exception if none exists.支持当前事务,如果当前没有事务,就抛出异常。
3.NEVER
Execute non-transactionally, throw an exception if a transaction exists.
以非事务方式执行,如果当前存在事务,则抛出异常。
4.NOT_SUPPORTED
Execute non-transactionally, suspend the current transaction if one exists.
以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
5.REQUIRES_NEW
Create a new transaction, suspend the current transaction if one exists.
新建事务,如果当前存在事务,把当前事务挂起。
6.SUPPORTS
Support a current transaction, execute non-transactionally if none exists.
支持当前事务,如果当前没有事务,就以非事务方式执行。
7.NESTED
Execute within a nested transaction if a current transaction exists, behave like PROPAGATION_REQUIRED else.
支持当前事务,新增Savepoint点,与当前事务同步提交或回滚。
嵌套事务一个非常重要的概念就是内层事务依赖于外层事务。外层事务失败时,会回滚内层事务所做的动作。而内层事务操作失败并不会引起外层事务的回滚。
8.PROPAGATION_NESTED 与PROPAGATION_REQUIRES_NEW的区别
它们非常类似,都像一个嵌套事务,如果不存在一个活动的事务,都会开启一个新的事务。使用PROPAGATION_REQUIRES_NEW时,内层事务与外层事务就像两个独立的事务一样,一旦内层事务进行了提交后,外层事务不能对其进行回滚。两个事务互不影响。两个事务不是一个真正的嵌套事务。同时它需要JTA 事务管理器的支持。
使用PROPAGATION_NESTED时,外层事务的回滚可以引起内层事务的回滚。而内层事务的异常并不会导致外层事务的回滚,它是一个真正的嵌套事务。
二.事务的隔离级别(Isolation Level)
首先说明一下事务并发引起的三种情况
a.Dirty Reads脏读
一个事务正在对数据进行更新操作,但是更新还未提交,另一个事务这时也来操作这组数据,并且读取了前一个事务还未提交的数据,而前一个事务如果操作失败进行了回滚,后一个事务读取的就是错误数据,这样就造成了脏读。
b.Non-Repeatable Reads不可重复读
一个事务多次读取同一数据,在该事务还未结束时,另一个事务也对该数据进行了操作,而且在第一个事务两次次读取之间,第二个事务对数据进行了更新,那么第一个事务前后两次读取到的数据是不同的,这样就造成了不可重复读。
c.Phantom Reads幻像读
第一个数据正在查询符合某一条件的数据,这时,另一个事务又插入了一条符合条件的数据,第一个事务在第二次查询符合同一条件的数据时,发现多了一条前一次查询时没有的数据,仿佛幻觉一样,这就是幻像读。
d.非重复度和幻像读的区别
非重复读是指同一查询在同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时发生非重复读。(A transaction rereads data it has previously read and finds that another committed transaction has modified or deleted the data. )
幻像读是指同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时发生幻像读。(A transaction reexecutes a query returning a set of rows that satisfies a search condition and finds that another committed transaction has inserted additional rows that satisfy the condition. )
表面上看,区别就在于非重复读能看见其他事务提交的修改和删除,而幻像能看见其他事务提交的插入。
1.DEFAULT (默认)
这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别.另外四个与JDBC的隔离级别相对应。
2.READ_UNCOMMITTED (读未提交)
这是事务最低的隔离级别,它允许另外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复读和幻像读。
3.READ_COMMITTED (读已提交)
保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据。这种事务隔离级别可以避免脏读出现,但是可能会出现不可重复读和幻像读。
4.REPEATABLE_READ (可重复读)
这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了不可重复读。
5.SERIALIZABLE(串行化)
这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读外,还避免了幻像读。
6.隔离级别解决事务并行引起的问题
相关推荐
虽然提供的示例是入门级别的,但它揭示了Spring事务管理的核心概念,为进一步学习和理解Spring事务处理的高级特性奠定了基础。在实际项目中,我们需要根据需求选择合适的配置,确保事务的正确性和数据的一致性。
6. **事务管理**:讲解Spring的事务管理功能,包括编程式事务管理和声明式事务管理,以及事务的传播行为。 7. **AOP**:阐述面向切面编程的基本原理,如何定义切面、通知类型以及如何在Spring中实现AOP。 8. **...
核心容器提供了Spring框架的基本组成部分,包括Spring的核心机制,如IoC和依赖注入。数据访问/集成模块支持对JDBC、ORM、OXM、JMS和事务管理的支持。Web模块提供了基础的面向Web的集成特性,例如多部分文件上传功能...
6. **Spring Boot快速开发**:了解Spring Boot的自动配置机制,创建基于Spring Boot的微服务。 7. **Spring Security应用**:学习如何配置和使用Spring Security,实现用户认证和权限控制。 通过这本书的学习,...
Spring的事务管理可以通过编程式或声明式的方式来进行,其中声明式事务管理更加灵活和易用,可以通过XML配置或注解的方式来定义事务边界和传播行为,使得事务管理与业务逻辑更加分离。 ### 数据访问/集成 Spring...
它不仅包含IoC容器的功能,还集成了国际化、事件传播、资源访问、AOP等功能,使得Spring能够处理更为复杂的应用场景。 SPeL(Spring Expression Language)是Spring提供的强大表达式语言,用于在运行时查询和操作...
"spring的事务补充.txt"可能包含了Spring事务管理的一些高级话题,如事务传播行为、读已提交(Read Committed)、可重复读(Repeatable Read)等隔离级别,以及如何处理事务回滚规则和异常传播。 "spring的嵌入...
Spring事务管理还提供了传播行为和隔离级别等事务属性配置,以满足不同业务场景下的事务需求。 总之,Spring框架通过依赖注入、AOP、事务管理等特性,大大简化了企业级应用的开发和维护。Spring通过接口的定义,...
- **事务传播行为**:定义了方法调用时如何参与当前事务或创建新事务。 #### 七、高级主题 - **Spring Boot**:基于Spring框架的快速应用开发框架,简化了配置和部署流程。 - **Spring Cloud**:一系列框架的有序...
- **应用上下文(ApplicationContext)**:它是BeanFactory的扩展,增加了对国际化、事件传播、资源加载等功能的支持,进一步增强了容器的功能,使Spring成为一个全面的框架。 2. **Spring的主要模块**: - **...
本文主要介绍Spring框架中的事务控制机制,涵盖了事务的基本概念、JDBC和Mybatis中的事务控制、Spring中的事务控制机制、事务的属性等内容。 一、事务控制 事务是用户操作数据库的基本单元,也可以说一个业务操作...
如:事务管理,编程人员不再需要手工控制事务,也不需处理复杂的事务传播 5、 Spring提供的众多辅助类,使用这些类能够加快应用的开发,如: JdbcTemplate、 HibernateTemplate 6、 Spring对于主流的应用框架提供了...
"11-buyStock-txproxy"提到了事务代理,Spring提供了事务管理机制,包括编程式和声明式事务。通过事务代理,可以方便地实现事务的传播行为和回滚规则。 "12-buyStock-annotation"可能再次涉及到注解在Spring中的...
学习时,可以先理解每个模块的作用,然后通过编写简单的示例来实践IoC和AOP的概念,逐步深入Spring的更多高级特性,如数据访问、Web应用、事务管理等。同时,阅读官方文档和相关的教程将对掌握Spring框架大有裨益。...
### Spring从入门到精通知识点详解 #### 一、Spring框架简介 - **定义与起源**:Spring是一个开源的轻量级Java开发框架,由Rod Johnson创建,并于2003年发布首个版本。Spring框架的核心特性是依赖注入(Dependency ...
第13篇 Spring事务与事务传播 * 介绍Spring中的事务和事务传播,包括事务的基本概念、事务的传播、事务的隔离级别等 * 演示如何使用Spring的事务来实现数据库事务处理 * 介绍如何使用Spring的事务传播来实现分布式...
- **事务传播机制**:深入理解Spring事务的传播规则及其在多线程环境下的应用。 - **Spring事务接口**:了解Spring中处理事务的关键接口,如PlatformTransactionManager、TransactionDefinition等。 11. **面试题...