`
GoTiger
  • 浏览: 9706 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

关于Spring 的事务

    博客分类:
  • Java
 
阅读更多
首先了解什么事事务,和一些基本概念。
什么是事务: 事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。

事务的四大特性

事务的特性-ACID:
原子性(Atomicity)
一致性(Consistency)
隔离性(Isolation)
持久性(Durability)

事务的特性-原子性:
事务中的操作,要么全做成,要么都不做
事务是不可拆分的
事务必须以 Commit/Rollback 结束

事务的特性-一致性:
单独运行的事务,必须保证保持数据库的一致状态
从一个一致状态迁移到另一个一致状态
与原子性相关

事务的特性-隔离性:
多个并发事务之间不能相互干扰
并发不影响事务的执行

事务的特性-持久性:
一旦事务成功完成(Commit),它对数据库的更新应该是持久的
即使在写入磁盘之前,系统发生故障
在下次启动之后,也应保障数据更新的有效

所以在我们的程序中,对于多次操作数据库的地方加入事务是很有必要的。那么怎么在spring3中加入事务呢?有了注解一切都很简单,首先在spring的配置文件中加入以下代码
<!-- 事务控制器 -->
		<bean id="txManager"
			class="org.springframework.jdbc.datasource.DataSourceTransactionM-anager">
			<property name="dataSource">
				<ref local="dataSource" />
			</property>
		</bean>
		<!-- surrpot proxool shutdown -->
<bean id="dataSourceFacade" class="org.logicalcobwebs.proxool.ProxoolFacade"
			destroy-method="shutdown" />

		<!-- 实现基于注解的事务管理 -->
<tx:annotation-driven transaction-manager="txManager" />

在service使用的时候只需要在该类或该接口实现类得某个方法上加上@Transactional即完成了对事务的管理,如果注释的是接口,则该接口的所有实现类都将被事务化。


使用注解事务注意事项:
1. 在service层不要对异常进行拦截,要对异常进行抛出!
2. 注解事务只能对public的方法可用,其它方法加入了无效,也可以把注解加在class上面这样当前类的所有公共方法都添加了事务功能
3. 在接口中添加了注解事务它的所有实现接口都将具有事务特性.建议不要加将注解加在接口上
4. 默认情况下,一个有事务方法, 遇到RuntiomeException 时会回滚 .  遇到 受检查的异常 是不会回滚 的. 要想所有异常都回滚,要加上 @Transactional( rollbackFor={Exception.class,其它异常})

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics