`

spring事务深入理解和案例分析

阅读更多
http://www.cnblogs.com/fjdingsd/p/5632949.html 参考文档

<!-- 事务相关配置 -->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="insert*" propagation="REQUIRED" read-only="false" isolation="READ_UNCOMMITTED" 
				rollback-for="java.lang.Exception" />
			<tx:method name="save*" propagation="REQUIRED" read-only="false" isolation="READ_UNCOMMITTED" 
				rollback-for="java.lang.Exception" />
			<tx:method name="update*" propagation="REQUIRED" read-only="false" isolation="READ_UNCOMMITTED" 
				rollback-for="java.lang.Exception" />
			<tx:method name="modify*" propagation="REQUIRED" read-only="false" isolation="READ_UNCOMMITTED" 
				rollback-for="java.lang.Exception" />
			<tx:method name="delete*" propagation="REQUIRED" read-only="false" isolation="READ_UNCOMMITTED" 
				rollback-for="java.lang.Exception" />
		</tx:attributes>
	</tx:advice>



//propagation="REQUIRED":spring配置事务的传播属性,spring默认的传播属性就是这个。如果当前没有事务就创建一个新的事务,如果当前已经有事务直接加入到现有的事务。

//isolation="READ_UNCOMMITTED":spring配置事务的隔离级别为未提交的读,这样会产生脏读。比如线程1需要更新订单备注为1但是还没有提交,线程2这个时候在另一个事务中可以读取到订单备注为1。




	<!-- 事务相关配置 -->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>
	<tx:annotation-driven transaction-manager="transactionManager"/> 


 @Transactional(propagation=Propagation.REQUIRED, isolation=Isolation.READ_COMMITTED)  
    @Override
    public void updateOrderMemoInfo(Map<String, Object> params) {

}



//基于注解的事务配置,配置当前事务传播属性为REQUIRED,事务的隔离级别为READ_COMMITTED




//事务的传播属性

//REQUIRED:支持当前事务,如果当前没有事务就新建一个事务,这个是spring默认的传播属性。

//REQUIRES_NEW:每次都新建一个事务,如果当前已经有事务,会把当前事务挂起。新建的事务和当前事务没有任何关系,是两个完全独立的事务。外层事务失败后不会影响内层事务,内层失败失败也可以不影响外层事务。

//SUPPORTS:支持当前事务,如果当前没有事务,就以非事务的方式运行。

//NOT_SUPPORTED:以非事务的方式运行,如果当前有事务,则把当前事务挂起。

//NEVER:以非事务的方式运行,如果当前有事务,则抛出异常。



//数据库事务的隔离级别

//Read-Uncommitted:未提交读。一个事务修改了数据但是事务还没有提交,另一个事务读取到了未提交的数据,这样会导致脏读。

//Read-Committed:提交读。一个事务两次读取同一条数据,另一个事务在第一次读后修改了该数据,会导致第一个事务两次读取到的数据不一致,导致不可重复读。可以避免了脏读

//Repeatable-Read:第一个事务修改了一定范围内的数据,第二个事务在这个范围内新增的了一条数据,会导致第一个事务少更新了一条数据,从而导致幻读。可以避免脏读和不可重复读。

//Serializable:所有事务都是串行话的一个一个的去执行,可以避免脏读、不可重复读、幻读。最高的隔离级别。

//总结:隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大,



//spring事务的隔离级别

//DEFAULT:spring默认的隔离级别,默认使用数据库的隔离级别。

//READ_UNCOMMITTED:允许一个事务读取到另一个事务还没有提交的数据,会产生脏读。

//READ_COMMITTED:能够保证一个事务提交了才能被另一个事务读取。

//REPEATABLE_READ:可以防止脏读、不可重复读

//SERIALIZABLE:最高的隔离级别,事务会顺序执行。
分享到:
评论

相关推荐

    spring事务案例分析.zip

    而"studyspring"可能是源代码目录,包含了实现这些案例的Java类和配置文件,通过阅读和学习这些代码,可以更深入地理解Spring事务的运用。 总结,Spring事务管理是其核心功能之一,它简化了事务处理的复杂性,使...

    JavaEE spring半自动bean管理事务案例

    通过分析这些代码,你可以更深入地理解这两个概念,并将它们应用到实际项目中。 总之,Spring的bean管理和事务处理是其强大功能的重要组成部分,通过合理利用,我们可以构建出更加健壮、易于维护的JavaEE应用。

    spring 深入分析

    ### Spring技术内幕:深入解析Spring架构与设计原理 #### Spring框架概述 Spring是一个开源的Java应用框架,由Rod ...希望本文能够帮助读者深入了解Spring框架的设计与实现原理,为今后的学习和工作打下坚实的基础。

    通过实际案例摸清楚Spring事务传播的行为.docx

    通过这样的实际案例分析,我们可以更直观地看到不同事务传播行为在实际应用中的效果,从而加深对Spring事务管理的理解。在实际开发中,根据业务需求正确选择事务传播行为,有助于保证数据的一致性和完整性。

    spring_tx的案例源码

    了解事务的回滚规则是理解Spring事务管理的关键。默认情况下,未捕获的运行时异常会导致事务回滚,而检查异常(继承自`Exception`的异常)则不会。通过`rollbackFor`属性,可以覆盖这一默认行为。 通过对"spring_...

    spring技术内幕-深入解析spring架构与设计原理

    本书将通过详细的案例分析和源码解读,帮助读者深入了解Spring的每个模块,从而在实际项目中更加得心应手地运用Spring框架。通过对这些核心概念的掌握,开发者不仅可以提升个人技术水平,还能提高团队协作效率,实现...

    SPRING技术内幕+深入解析SPRING架构与设计 55M(下载地址)

    总之,《Spring技术内幕+深入解析Spring架构与设计》是一本不可多得的技术书籍,它不仅能够帮助读者深入了解Spring框架的设计理念和实现机制,还能激发读者对于Java语言本身的兴趣和探索欲望。无论是对于职业发展...

    SPRING技术内幕:深入解析SPRING架构与设计原理.zip

    《SPRING技术内幕:深入解析SPRING架构与设计原理》这本书深入探讨了Spring框架的核心机制和设计理念,旨在帮助读者理解并掌握Spring的精髓...书中还可能包含案例分析和实战指导,帮助读者将理论知识应用于实际开发中。

    hibernate struts spring案例

    SSH,即Struts、Spring和Hibernate的组合,是Java Web开发中的一个经典框架集合,用于构建高效、可扩展的企业级应用...通过分析和运行这个案例,开发者可以深入理解SSH框架的集成和应用,提升自己的Java Web开发能力。

    OSGI整合Spring、Mybatis、Spring MVC实现一个登录应用案例

    分析这个源码,我们可以深入理解OSGI环境下这些组件如何协同工作,以及如何在实际项目中实现类似的功能。 总的来说,这个案例展示了OSGI的模块化优势,以及如何将Spring、Mybatis和Spring MVC集成到OSGI环境中,...

    Spring技术内幕-深入解析_Spring架构与设计原理

    《Spring技术内幕-深入解析_Spring架构与设计原理》是一本全面而深入的Spring框架指南,不仅提供了理论知识,还包含了大量的实践案例和源代码分析,对于希望深入了解Spring内部工作原理的开发者来说,是一本不可或缺...

    SpringData和Spring和JPA的整合

    通过阅读和分析这些代码,可以更直观地理解SpringData和JPA如何在实际项目中协同工作,提高开发效率。 总的来说,SpringData和JPA的整合为开发者带来了极大的便利,减少了手动编写SQL和DAO层代码的工作量,让开发者...

    JSf-Spring-Hibernate整合开发案例教程

    5. 案例分析:通过实际的开发案例,演示JSF-Spring-Hibernate整合的全过程,包括项目结构、配置文件、控制器、服务层和DAO层的实现。 6. 故障排查和优化技巧:分享在整合过程中可能遇到的问题及解决方法,提升开发...

    Spring技术内幕:深入解析Spring架构与设计原理

    作者通过源代码的阅读,剖析了Spring框架的设计原理和内部架构,带领读者深入理解Spring各个组件是如何协同工作,以及其设计决策背后的原因。这样的分析对于Java开发者深入掌握Spring框架有着极大的帮助,尤其是在...

    spring-framework-2.0.7-with-dependenciesspring-framework-2.0.7spring-framework-2.0.7案例docs

    本文将深入探讨Spring Framework 2.0.7版本,它是Spring发展历程中的一个重要里程碑,为开发者提供了丰富的功能和强大的支持。 一、Spring框架基础 Spring框架以其依赖注入(Dependency Injection,DI)和面向切面...

    精通Java EE项目案例-基于Eclipse Spring Struts Hibernate光盘源码(带数据库)

    通过分析和运行这些源码,开发者可以深入理解如何在实际项目中运用Eclipse、Spring、Struts和Hibernate,提升自己的Java EE开发能力。同时,提供数据库版本意味着案例中可能包含了数据库设计和数据操作的示例,这...

    spring认证考试完全笔记

    Spring认证考试完全笔记是针对那些想要深入理解和掌握Spring框架核心概念及应用的Java开发者的一份宝贵资源。这份笔记详尽地涵盖了Spring框架的所有关键知识点,旨在帮助考生充分准备Spring认证考试,确保他们在实际...

    spring入门到精通完整版源码

    本资源"spring入门到精通完整版源码"提供了一个全面的学习路径,帮助开发者从基础到深入理解Spring框架。 一、Spring框架简介 Spring框架由Rod Johnson创建,最初是为了简化企业级Java应用的开发。它通过提供一系列...

    2011最新ibatis+Mybatis+Spring整合文档全集以及案例

    案例分析部分通常会展示如何在实际项目中使用这些技术。这可能包括创建用户管理模块,员工信息维护,或者API设计与实现。通过案例,开发者可以了解如何设计数据库模型,编写Mapper接口和XML映射文件,以及如何在...

Global site tag (gtag.js) - Google Analytics