Spring学习(四)事务

原创 2017年01月03日 11:45:26
<!-- 配置Spring的事务处理 -->
	<!-- 创建事务管理器-->
	<bean id="txManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>
<!-- 配置AOP,Spring是通过AOP来进行事务管理的 -->
	<aop:config>
	<!-- 设置pointCut表示哪些方法要加入事务处理 -->
	<!-- 事务声明通常都会在Service来处理多个业务对象逻辑的关系,注入删除,更新等,此时如果在执行了一个步骤之后抛出异常
		就会导致数据不完整,所以事务不应该在DAO层处理,而应该在service,这也就是Spring所提供的一个非常方便的工具,声明式事务 -->
		<aop:pointcut id="allMethods"
			expression="execution(* org.zttc.itat.service.*.*(..))" />
		<!-- 通过advisor来确定具体要加入事务控制的方法 -->
		<aop:advisor advice-ref="txAdvice" pointcut-ref="allMethods" />
	</aop:config>
<!-- 配置哪些方法要加入事务控制 -->
	<tx:advice id="txAdvice" transaction-manager="txManager">
		<tx:attributes>
		<!-- 让所有的方法都加入事务管理,为了提高效率,可以把一些查询之类的方法设置为只读的事务 -->
			<tx:method name="*" propagation="REQUIRED" read-only="true"/>
			<!-- 以下方法都是可能设计修改的方法,就无法设置为只读 -->
			<tx:method name="add*" propagation="REQUIRED"/>
			<tx:method name="del*" propagation="REQUIRED"/>
			<tx:method name="update*" propagation="REQUIRED"/>
			<tx:method name="save*" propagation="REQUIRED"/>
		</tx:attributes>
	</tx:advice>

如果应用程序的持久化是通过Hibernate实现的,那么需要使用HibernateTransactionManager。

sessionFactory属性需要装配一个Hibernate的session工厂,HibernateTransactionManager的实现细节是它将事务管理的职责委托给org.hibernate.Transaction对象,而后者是从Hibernate Session中获取到的。当事务成功完成时,HibernateTransactionManager将会调用Transaction对象的commit()方法,反之,将会调用rollback()方法。


<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>

如果应用程序中直接使用JDBC(+mysql)来进行持久化,DataSourceTransactionManager处理事务,DataSourceTransactionManager是通过调用java.sql.Connection来管理事务,而java.sql.Connection是通过DataSource获取到的。通过调用连接的commit()方法来提交事务,同样,事务失败则通过调用rollback()方法进行回滚。


事务四大特性(简称ACID) 


1、原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么均不执行。
2、一致性(Consistency):几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致。
3、隔离性(Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。

4、持久性(Durability):对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。


Spring不仅可以控制事务传播行为(PROPAGATION_REQUIRED等),还可以控制事务隔离级别(ISOLATION_READ_UNCOMMITTED等)


版权声明:本文为博主原创文章,未经博主允许不得转载。

Spring学习笔记(四)-- Spring事务全面分析

通过本系列的文章对Spring的介绍,我们对Spring的使用和两个核心功能IOC、AOP已经有了初步的了解,结合我个人工作的情 况,由于项目是金融系统,那对事务的控制是必不可少的,并且是非常严格的控...

spring学习手册 包括事务讲解

  • 2011年03月18日 16:52
  • 256KB
  • 下载

spring boot学习3之mybatis+druid+事务+PageHelper分页插件+sql打印插件整合

上篇博文学习了spring boot下对于配置文件的读取。这篇博文学习下spring boot怎样整合mybatis,并使用指定的数据库连接池,事务,分页插件的整合。       本例子用的是mave...

Spring的事务管理机制学习(设计模式之策略模式)

Spring事务机制学习笔记
  • canot
  • canot
  • 2016年03月01日 10:39
  • 3139

spring学习笔记(23)基于tx/aop配置切面增强事务

在上一篇文章中,我们使用了声明式事务来配置事务,使事务配置从service逻辑处理中解耦出来。但它还存在一些缺点: 1. 我们只针对方法名的特定进行拦截,但无法利用方法签名的其它信息定位,如修饰符、...

spring事务传播机制和隔离级别学习笔记

spring事务传播机制和隔离级别学习笔记

Spring MVC学习总结(18)——SpringMVC事务Transactional注解使用总结

一、事物注解方式: @Transactional 当标于类前时, 标示类中所有方法都进行事物处理 , 例子: @Transactional  public class TestServiceBe...

Spring 学习笔记(八) 声明式事务

声明式事务
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spring学习(四)事务
举报原因:
原因补充:

(最多只允许输入30个字)