`

spring事务与锁汇总。

 
阅读更多

 

spring事务传播

 

  • PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择,默认。
  • PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。
  • PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。
  • PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。
  • PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
  • PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。

隔离级别(默认数据库的隔离级别)

  • Serializable:最严格的级别,事务串行执行,资源消耗最大;
  • REPEATABLE  READ:保证了一个事务不会修改已经由另一个事务读取但未提交(回滚)的数据。避免了“脏读取”和“不可重复读取”的情况,但是带来了更多的性能损失。
  • READ  COMMITTED:大多数主流数据库的默认事务等级,保证了一个事务不会读到另一个并行事务已修改但未提交的数据,避免了“脏读取”。该级别适用于大多数系统。
  • Read  Uncommitted:保证了读取过程中不会读取到非法数据。隔离级别在于处理多事务的并发问题。

 基于JDK动态代理 <tx:annotation-driven transaction-manager="txManager"/>  只对公开接口的方法有效,即注解,xml配置接口的公开方法上。

基于CGLIB类代理 <tx:annotation-driven transaction-manager="txManager" proxy-target-class="true"/>  只对具体类有效,即注解,xml配置具体类的的公开方法上。

基于aspectj的 <tx:annotation-driven transaction-manager="txManager" mode="aspectj" proxy-target-class="true"/>   类,接口都有效。

 

 共享锁(S):共享锁就是多个事务对于同一数据可以共享一把锁,都能访问到数据,但是只能读不能修改。

 排他锁(X):排他锁就是不能与其他所并存,如一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁,包括共享锁和排他锁,但是获取排他锁的事务是可以对数据就行读取和修改。

另外,为了允许行锁和表锁共存,实现多粒度锁机制,InnoDB还有两种内部使用的意向锁(Intention Locks),这两种意向锁都是表锁。

 意向共享锁(IS):事务打算给数据行加行共享锁,事务在给一个数据行加共享锁前必须先取得该表的IS锁。

 意向排他锁(IX):事务打算给数据行加行排他锁,事务在给一个数据行加排他锁前必须先取得该表的IX锁。

  

 

X

IX

S

IS

X

冲突

冲突

冲突

冲突

IX

冲突

兼容

冲突

兼容

S

冲突

冲突

兼容

兼容

IS

冲突

兼容

兼容

兼容

 

对于insert、update、delete,InnoDB会自动给涉及的数据加排他锁(X);对于一般的Select语句,InnoDB不会加任何锁,事务可以通过以下语句给显示加共享锁或排他锁。

 

共享锁:SELECT ... LOCK IN SHARE MODE;    

在读取的行上设置一个共享模式的锁。这个共享锁允许其它session读取数据但不允许修改它。 行读取的是最新的数据,如果他被其它事务使用中而没有提交,读取锁将被阻塞知道那个事务结束。 

 

排他锁:SELECT ... FOR UPDATE;

在读取行上设置一个排他锁。组织其他session读取或者写入行数据

 

 

 

分享到:
评论

相关推荐

    Spring事务管理失效原因汇总

    标题“Spring事务管理失效原因汇总”指出了本文的核心内容是分析在使用Spring框架进行事务管理时可能遇到的问题及其原因。描述部分进一步说明了事务失效的后果往往不明显,容易在测试环节被忽略,但在生产环境中出现...

    spring课件汇总

    这个"spring课件汇总"包含的资源很可能是为了帮助学习者深入理解并掌握Spring框架的各种概念和技术。下面,我们将详细探讨Spring框架的核心知识点。 1. **依赖注入(Dependency Injection, DI)**: Spring的核心特性...

    Spring开发常用到的知识汇总

    本汇总将深入探讨Spring开发中的一些关键知识点。 1. **依赖注入(Dependency Injection, DI)**:Spring的核心特性之一,它允许对象之间的依赖关系在运行时通过配置文件或注解来管理,而非硬编码。这增强了代码的...

    Spring基础知识汇总Java开发必看

    Spring作为一个全面的后端开发解决方案,包括了依赖注入、面向切面编程、数据访问、事务管理、Web应用等多个方面。以下是对Spring基础知识的详细讲解: 1. **依赖注入(Dependency Injection, DI)** 依赖注入是...

    Spring_Batch系列文章汇总

    它支持大量数据的处理,拥有包括日志记录、事务管理、统计作业处理、重新启动和跳过等在内的诸多功能。 由于Spring_Batch是基于Spring框架构建的,它能够使开发者更加容易地使用企业级服务。Spring_Batch提供了高度...

    JavaSpring练习案例汇总.rar

    这个"JavaSpring练习案例汇总.rar"压缩包很可能包含了多个示例项目,帮助学习者深入理解和掌握Spring框架的核心概念和技术。让我们详细地探讨一下这些知识点: 1. **Spring 概述**:Spring 是一个开源框架,它提供...

    spring资料汇总

    "IntroductionToSpring.ppt" 和 "Introduction2open-sourceSpringframework4J2EE.ppt" 这两份PPT资料,主要介绍了Spring如何与J2EE平台集成,包括数据库访问、事务管理、安全性等方面,展示了Spring在企业级应用中的...

    Spring3.1 AOP倚赖jar 包汇总

    AOP(面向切面编程)是Spring框架的重要特性,允许开发者将关注点分离,比如日志、事务管理等,从核心业务逻辑中解耦出来。本压缩包包含了实现Spring 3.1 AOP功能所需的若干关键jar包。 首先,`aspectj-1.6.12.jar`...

    Spring面试题汇总(100问).pdf

    6. Spring事务实现方式:包括TransactionProxyFactoryBean、AspectJ自动代理、XML配置的、等元素,以及基于注解的@Transactional。 7. AOP模块:AOP(Aspect Oriented Programming)是面向切面编程,Spring的AOP...

    struts2,spring,mybatis汇总jar包下载

    AspectJ是一个强大的Java语言扩展,支持声明式地编写横切关注点,如日志、事务管理等。 6. JDBC驱动:`ojdbc14-10.2.0.2.jar`是Oracle数据库的JDBC驱动,用于连接和操作Oracle数据库。 7. Freemarker:`freemarker...

    Struts Spring Hibernate面试题汇总

    【SSH面试题汇总】主要涉及的是Struts、Spring和Hibernate这三个流行Java EE框架的相关知识,以及MVC设计模式的理解。MVC(Model-View-Controller)模式是软件工程中的一种架构模式,它将应用程序分为三个核心组件:...

    spring integration in action

    - **与 Spring Integration 的集成:** 讨论了如何使用 Spring Integration 与 JMS 进行集成,实现更高级别的消息传递。 - **高级主题:** 探索了使用 JMS 进行事务管理和消息持久化的高级技术。 **10: 发送和接收...

    Spring面试题汇总.pdf

    Spring的主要设计目标是提供一个一站式的轻量级应用开发平台,支持面向接口的编程,降低JavaEE API的使用难度,同时提供灵活的扩展性,易于与其他开源框架如Struts、Hibernate、MyBatis等集成。Spring框架通过IoC...

    Spring Batch In Action

    - **事务管理**:Spring Batch 内置了对事务的支持,确保数据处理的完整性和一致性。 - **监控与日志记录**:Spring Batch 提供了强大的监控功能,帮助开发者监控 Job 的执行状态和性能指标;同时,还提供了丰富的...

    Struts+Hibernate+Spring面试题合集及答案常见题目经典精选汇总大全.docx

    - Spring事务管理可以通过编程式和声明式两种方式实现,声明式事务管理通常结合注解或XML配置完成。 - Spring AOP允许在不修改代码的情况下添加功能,如日志、事务管理等,通过定义切点和通知来实现。 4. 综合...

    Struts2 + hibernate + Spring 的 jar包汇总

    Spring框架提供了一个全面的编程和配置模型,支持事务管理、依赖注入以及AOP(面向切面编程)等。 首先,Struts2框架的核心在于它的Action和Result机制。Action类负责接收用户请求,处理业务逻辑,并通过Result返回...

    Spring,hibernate,struts常见的面试笔试题汇总

    面试时可能会综合考察这三个框架的整合使用,如Spring与Hibernate的集成,以实现数据访问层的事务管理,以及Spring与Struts的集成,利用Spring的DI特性管理Struts的Action实例。此外,还会涉及到如何优化这些框架的...

    传智播客的struts2,hibernate,spring的ppt汇总

    3. **Spring**:IoC容器、AOP原理、Spring MVC、数据源配置、事务管理、Spring与Struts2、Hibernate的整合等。 这些PPT对于初学者来说,可以帮助他们快速理解三大框架的基本概念和应用场景,而对于有经验的开发者来...

    Spring5.1中文参考指南.pdf

    ### Spring5.1中文参考指南知识点汇总 #### 一、Spring框架概述 - **Spring**:代表一个开源的Java平台框架,旨在简化企业级应用的开发。 - **历史背景**:Spring项目始于2002年,由Rod Johnson创建,自2004年发布...

Global site tag (gtag.js) - Google Analytics