`
孤星119
  • 浏览: 124213 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Spring 事务 笔记

 
阅读更多

以下内容均摘自网上资料

1.   脏读,不可重复读,幻象读

  • 脏读 
          当一个事务读取了另一个事务尚未提交的更新,就叫脏读。在另一个事务回滚的情况下,当前事务所读取的另一个事务的数据就是无效的。  解决脏读方法:把事务隔离级别调整到READ COMMITTED
  • 不可重复读取 
          一个事务先后读取同一条记录,但两次读取的数据不同,我们称之为不可重复读。通常这种情况是由于数据在二次查询之间被另一个并发的事务所修改。 解决不可重复读方法: 事务级别:REPEATABLE READ
  • 幻象读 
          一个事务先后读取一个范围的记录,但两次读取的纪录数不同,我们称之为幻象读。解决方法:把事务隔离级别调整到SERIALIZABLE

      幻象读和不可重复读是两个容易混淆的概念,前者是指读到了其它已经提交事务的新增数据,而后者是指读到了已经提交事务的更改数据(更改或删除),为了避免这两种情况,采取的对策是不同的,防止读取到更改数据,只需要对操作的数据添加行级锁,阻止操作中的数据发生变化,而防止读取到新增数据,则往往需要添加表级锁——将整个表锁定,防止新增数据(Oracle使用多版本数据的方式实现)。

 

 

 

 

 2.   Spring事务属性

  • 事务的传播特性(Propagation)
  • 事务的隔离级别(Isolation)
  • 事务的只读属性
  • 事务的超时属性 

     1). 事务的传播特性(Propagation)

           常见的传播特性有:

(1). PROPAGATION_REQUIRED:支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
(2). PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。
(3). PROPAGATION_MANDATORY:支持当前事务,如果当前没有事务,就抛出异常。
(4). PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起。
(5). PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
(6). PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。

 

Spring配置事务传播行为的代码(配置文件,此处使用到了Spring 配置文件的tx标签;也可使用注解配置这些东东,具体代码不写了)

<!-- 配置当前事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
	<property name="sessionFactory"><ref bean="sessionFactory" /></property>
	<property name="NestedTransactionAllowed" value="true"></property>
</bean>

<!-- 配置事务的传播特性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
	<tx:attributes>
		<tx:method name="save*" propagation="REQUIRED" />
		<tx:method name="update*" propagation="REQUIRED" />
		<tx:method name="delete*" propagation="REQUIRED" />
		<tx:method name="find*" read-only="true" />    <!-- 这里的read-only就是后面要说到的事务的只读属性 -->
	</tx:attributes>
</tx:advice>

 
 

     2). 事务的隔离级别

(1). ISOLATION_DEFAULT: 使用数据库默认的事务隔离级别.
(2). ISOLATION_READ_UNCOMMITTED: 这是事务最低的隔离级别,它充许其它事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复读和幻像读。
(3). ISOLATION_READ_COMMITTED: 保证一个事务修改的数据提交后才能被其它事务读取,其它事务不能读取该事务未提交的数据。可避免脏读。
(4). ISOLATION_REPEATABLE_READ: 它除了保证一个事务不能读取另一个事务未提交的数据外,也可避免脏读。这种事务隔离级别可以防止脏读,不可重复读,但是可能出现幻像读。
(5). ISOLATION_SERIALIZABLE 这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读外,还避免了幻像读。 

     3). 事务的只读属性

 此属性是可选的,表示该事务不参与数据库更新操作,事务声明只读后,数据库会对该事务进行一些优化,以提升速度和性能,如Oracle对于只读事务,不启动回滚段,不记录回滚log。 只读属性需要配合传播属性一起设置,设置代码,参看上面的传播特性代码

     4). 事务的超时属性

这个属性和事务的只读属性一样需要搭配事务的传播行为共同设置,它设置了事务的超时时间,事务本身可能会因某种原因很长没有回应,在这期间事务可能锁定了数据库的表格,这样会出现严重的性能问题。通过设置事务的超时时间,从开始执行事务起,在规定的超时时间内如果没有事务就将它回滚。 此设置也需要和传播特性一起设置,设置代码例子(咦,怎么没搜到这样的代码,自己也懒得写了)

 

 

OK,终于理个差不多了。  上面的这些都是搜集了多篇文章整理出来的,自己认为容易懂的。感谢这些的原作者

    


 

分享到:
评论

相关推荐

    spring-note spring 读书笔记

    6. **Spring事务管理**: Spring提供了PlatformTransactionManager接口,支持不同的事务管理策略,如编程式和声明式事务。`spring_transaction.txt`会详细阐述如何配置事务管理,以及@Transactional注解的使用。 7. ...

    Spring学习笔记(精华全记录)

    ### Spring学习笔记(精华全记录) #### Spring框架概述 Spring框架源自Rod Johnson的个人项目,最初于2002年末发布。Spring并非一开始就作为一个完整的框架出现,而是从一个项目逐步发展而来。随着项目的成熟,...

    Spring学习笔记+学习源码.zip

    这份"Spring学习笔记+学习源码.zip"资源包含了深入学习Spring及其相关技术的知识点,以及实践代码,对提升Spring技能将大有裨益。 首先,我们来详细讨论Spring框架的主要组件和功能: 1. **依赖注入(Dependency ...

    Struts2笔记+Hibernate3.6笔记+Spring3笔记

    6. **事务管理**: 提供编程和声明式事务管理,与Spring整合时通常使用声明式事务。 **Spring3笔记** Spring是企业级应用的全面解决方案,包括依赖注入(DI)、面向切面编程(AOP)、事务管理等。以下是关键点: 1...

    Spring学习笔记.zip

    面向切面编程是Spring提供的另一个重要功能,它允许开发者将关注点分离,比如日志、事务管理等,从主业务逻辑中抽取出来,形成独立的“切面”。切面可以在特定的“连接点”(如方法调用)上织入,提高了代码的复用性...

    马士兵Spring课堂笔记(超级详细版).pdf

    马士兵Spring课堂笔记(超级详细版) 本资源主要讲解了Spring框架的基础概念和应用,涵盖了面向接口编程、IOC/DI、AOP、Spring应用IOC/DI、Spring应用AOP、Struts2.1.6 + Spring2.5.6 + Hibernate3.3.2整合、Spring...

    Spring学习笔记&源码

    本资料“Spring学习笔记&源码”是基于网易云课堂黑马程序员的Spring四天精通课程,旨在帮助学习者深入理解和实践Spring框架。 笔记部分可能会涵盖以下内容: 1. **Spring概述**:介绍Spring框架的历史、特点和主要...

    spring课堂笔记的相关知识

    Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理 AOP编程的支持 Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能 声明式事务的支持 只需要通过配置就可以...

    Spring Data JPA 笔记

    5. **事务管理**:Spring Data JPA集成Spring的事务管理,可以方便地在方法级别控制事务的开始、提交、回滚,确保数据一致性。 6. ** auditing**:Spring Data JPA还提供了审计功能,通过`@CreationTimestamp`和`@...

    百知教育Spring详解笔记.rar

    Spring框架是Java开发中的核心组件,它以其IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)两大特性而著名,为开发者提供了全面的解决方案,包括依赖注入、数据访问、...

    马士兵老师spring框架学习笔记

    马士兵老师是知名的Java教育专家,他的Spring框架学习笔记深入浅出,对于初学者和进阶者来说都是一份宝贵的资源。这份笔记涵盖了Spring的核心概念、配置、AOP(面向切面编程)、DI(依赖注入)等关键知识点。 1. **...

    Spring5笔记.zip

    AOP允许开发者定义“切面”,即关注点的模块化,如日志、事务管理等。Spring5提供声明式AOP,通过使用注解或XML配置,可以轻松地在代码中插入切面逻辑。 4. **Spring Boot**: 虽非Spring5的一部分,但Spring ...

    Spring笔记示例源代码

    "Spring笔记示例源代码"这个资源很可能是为了帮助学习者深入理解Spring框架的各种功能和用法而提供的实际代码示例。 1. **Spring IoC**:IoC是Spring的核心特性,它将对象的创建和管理权交给Spring容器,使得开发者...

    spring课堂笔记

    这篇"spring课堂笔记"包含了两部分关于Spring的学习心得,对于初学者来说是非常宝贵的资源。以下是笔记中可能涵盖的关键知识点: 1. **IoC(Inversion of Control,控制反转)**:Spring的核心特性之一,通过容器...

    spring hibernate 事务管理学习笔记(二)

    在本篇“Spring Hibernate 事务管理学习笔记(二)”中,我们将深入探讨Spring框架与Hibernate集成时如何实现高效、安全的事务管理。这是一篇关于源码分析和技术工具使用的文章,适合对Java开发和数据库操作有基础...

    Spring学习笔记.doc

    ### Spring学习笔记知识点详解 #### 一、Spring框架概述 **1.1 什么是Spring** Spring框架是一个开源的轻量级应用框架,主要用于简化企业级应用程序的开发过程。它的核心特性在于提供了一种灵活的方式来组织和...

    spring hibernate 事务管理学习笔记(一)

    在实际开发中,理解这部分源码有助于我们更深入地掌握Spring事务管理的工作原理。 至于工具,开发者可以使用诸如IntelliJ IDEA这样的IDE,其中集成的调试工具可以帮助我们跟踪代码执行流程,查看事务状态的变化,...

    spring学习笔记

    #### 六、Spring事务管理 Spring提供了声明式的事务管理机制,简化了事务的配置和管理。 ##### 1. 事务的概念 - **原子性**:事务是一个不可分割的工作单元。 - **一致性**:事务完成后系统必须处于一致状态。 - *...

    spring学习笔记(十五)-编程式事务例子

    标签“源码”提示我们可能会涉及Spring事务管理的底层实现。在Spring框架中,事务管理器会利用AOP代理来织入事务控制代码。当使用JDBC时,Spring会通过Connection的setAutoCommit(false)方法开启手动事务,并在适当...

    动力节点老杜Spring6,配套笔记PDF文件

    动力节点老杜Spring6配套笔记主要讲解了Spring框架的一些核心概念和最佳实践,特别是针对代码设计中的开闭原则(Open-Closed Principle, OCP)进行了深入探讨。在给出的代码示例中,我们可以看到一个简单的用户登录...

Global site tag (gtag.js) - Google Analytics