您的位置:首页 > 编程语言 > Java开发

Spring4快速入门第七章事务管理

2016-02-21 11:08 615 查看
spring事务管理

事务介绍:

事务是一系列动作,要么一起完成,要么一起结束。用来保证数据的完整性和一致性。最常见的就是转账问题:A出账和B进账要同时完成,否则就会出现A钱出账了,B钱却没有的情况。

事务分类:

编程式事务管理(用代码嵌入业务中管理事务,不建议使用);声明式事务管理(通过配置的方式管理,从业务中分离出来)。

配置声明式事务(基于注解):

在spring配置文件中配置

<!-- 配置事务管理器 -->
	<bean id="transactionManager" 
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource"></property>
	</bean>
	
	<!-- 启用事务注解 -->
	<tx:annotation-driven transaction-manager="transactionManager"/>
如果是通过hibernate框架这需要将DataSourceTransactionManager改为HibernateTransactionMannger

在方法或类上填加 @Transactional 即可

事务属性:

事务的传播性

触发点:当一个事务A调用另外一个事务B

1.使用 propagation 指定事务的传播行为

2.默认取值为 REQUIRED, 使用调用方法A的事务,里面的事务B必须都要满足事务A,也就相当于串联电路,一旦出现问题就走不通。

3.REQUIRES_NEW: 事务自己的事务, 执行一个是一个,也就相当于并联电路,出现问题自己扛不影响整体。

事务的隔离级别

事务隔离级别是为了避免并发事务所带来的问题,但考虑到效率一般用比较低的隔离:READ_COMMITTED

使用 isolation 指定事务的隔离级别

事务回滚

声明式事务默认对所有的运行时异常进行回滚. 也可以针对性进行设置. 通常情况下去默认值即可.

noRollbackFor={XXXException.class}

noRollbackForClassName = ""

在遇到一些认为指定的异常错误可以使用noRollbackForClassName ,不会滚该异常导致的问题。及忽略这个问题以便提高效率。

事务是否只读

使用 readOnly 指定事务是否为只读. 优化事务便于提高效率,前提事务只读取数据

事务占用时间

使用 timeout 指定强制回滚之前事务可以占用的时间,避免事务占用太多时间以便提高效率。

@Transactional(propagation=Propagation.REQUIRES_NEW,
			isolation=Isolation.READ_COMMITTED,
			noRollbackFor={Exception.class},
			readOnly=true,
			timeout=5)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: