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等)


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

相关文章推荐

struts2,springmvc,servlet 单多例问题

struts 2的Action是多实例的并非单例,也就是每次请求产生一个Action的对象。原因是:struts 2的Action中包含数据,例如你在页面填写的数据就会包含在Action的成员变量里面...

过滤器,拦截器区别

1. 拦截器是基于java的反射机制的,而过滤器是基于函数回调。 2. 拦截器不依赖与servlet容器,过滤器依赖与servlet容器。 3. 拦截器只能对action请求起作用,而过滤器则可以对...

Spring学习之事务管理基础

Spring学习之事务管理基础数据库事务相关概念事务的定义 事务,一般指的是数据库事务,是指数据库操作的时候,多个执行语句之间是一个逻辑上的整体,也就是说,这些操作之间要么都执行,要么就都不执行 事务...

Spring学习历程---Hibernate访问数据库可脱离事务管理器

JdbcTemplate执行的语句马上提交,没有事务,所以没有必要在Spring应用中配置事务管理器,因为即使配置了,也没有用。 对于Hibernate而言,情况便有不同,因为hibernate并不会...

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

1、事务的基本特性: 原子性:原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 一致性:一致性指事务前后数据的完整性必须保持一致。 隔离性:隔离性指多个用户并发访问...

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

Spring事务机制学习笔记
  • canot
  • canot
  • 2016-03-01 10:39
  • 2897
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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