• 欢迎来到论文发表网(www.lunwenchina.cn),我们为您提供专业的论文发表咨询和论文发表辅导!
受“清朗”行动影响,原网站QQ被封,新老作者请联系通过新的QQ:189308598。或者电话微信:15295038855

你的位置:论文发表网 >> 论文库 >> 计算机论文 >> 计算机应用 >> 详细内容 在线投稿

基于 Spring 的事务处理机制的应用与研究

热度0票  浏览304次 时间:2018年7月23日 17:05
  摘要:文章介绍事务的管理机制及Spring中事务的五种实现方式,对五种实现方式进行分析比较,建议使用基于@Transactional 注解的事务定义方式。
  关键词:Spring;事务
  中图分类号:TP311.1 文献标识码:A 文章编号:1673-1131(2015)10-0120-02.
  0 引言
  事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列操作。这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行。事务是一个不可分割的工作逻辑单元[1]。
  比如,小张账户上有一千元,小李账户上只有一元,现要从小张的帐户转帐一千元到小李的帐户。转帐后余额总和保持不变,为 1001 元。但是完成操作后,小张的帐户没有减少,但小李的帐户却多了一千元,转帐后余额总和变成了 2001 元,为何会多出一千元呢?因为小张帐户原有一千元,减少一千元后为 0 元,违反了银行规定余额不能少于一元的约束,所以终止执行。但后面的语句并没有中断执行,小李的帐户增加了一千元,变为 1001 元。
  使用事务就可以帮我们解决以上的问题,因为事务是一个整体。如果其中一步失败了,那整个操作都取消;只有每步都成功了,则整个操作才完成。
  1 Spring 事务技术介绍
  1.1 Spring 框架技术 Spring是基于控制反转IOC(InversionofControl)和面向方面编程 AOP(AspectOrientedProgramming)的轻量级容器框 架[2]。
  Spring 由七个定义良好的模块组成,有 Spring Aop、SpringORM,Spring DAO 等等。每个模块既可单独存在,也可以和其它的模块结合起来实现。组件的关系通过配置 Spring 框架的 applicationContext.xml 联系起来 [3]。Spring 框架带来的好处:面向接口编程,Spring 将使用接口的复杂度降低到零;Spring 框架让代码的测试更简单了等等。
  1.2 Spring 事务技术
  对于方法级别的事务管理,如果方法在运行过程中出现异常则事务会回滚,如果未出现异常则事务会成功提交。所以,事务管理的主要任务是事务的开始、回滚和提交。通常查询是不需要进行事务管理的,而增删改就必须要用到事务管理了。
  Spring 提供声明式事务管理(基于 XML 方式配置事务和基于注解方式管理事务)。声明式事务的优点是不用通过编程的方式就能够管理事务,这样就在业务的代码中就不用掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明或在业务方法上进行@Transactional注解,便可以将事务规则应用到业务逻辑中。
  基于注解方式管理事务可以对要开启的事务做具体的事务属性配置。所有的方法除非显示声明不开启事务,否则会默认开启事务。基于注解方式管理的事务对于事务传播行为、事务的回滚等事务管理属性的设置也能更为便捷地实现[4]。
  2 Spring 的事务配置方式
  Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource、TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分[5]。
  2.1 每个 Bean 都有一个代理
  Bean 代理如图 1 所示:
  图 1 Bean 代理
  2.2 每个 Bean 都有一个代理
  (1)定义 LocalSessionFactoryBean 类,id 命名为 id="sessionFactory"。
  (2)定义事务管理器,id 命名为 id="transactionManager"。
  (3)定义 TransactionProxyFactoryBean 类,id 命名为:id="tBase",方法一的定义是一样的;(4)配置事务管理器,和方法一的区别是只需配置属性transactionManager即可;配置事务属性,和方法一的定义是一样的。
  (5)配置 DAO,这是和方法有所区别的:
  <bean id="userTarget" class="com.dao.UserDaoImpl">
  <property name="sessionFactory" ref="sessionFactory" />
  </bean>
  <bean id="userDao" parent="tBase" >
  <property name="target" ref="userTarget" />
  </bean>
  2.3 使用拦截器
  使用拦截器如图 2 所示:
  图 2 使用拦截器
  2.4 使用 tx 标签配置的拦截器
  使用 tx 标签配置的拦截器如图 3 所示:
  图 3 使用 tx 标签配置的拦截器
  2.5 全注解
  同样要定义事务管理器。Spring 还提供了@Transactional注解的事务配置,该方式写程序方便,配置文件少,便于维护与管理。如果一个类前加上@Transactional,则表示这类受 spring的事务管理。该类底下的所有业务方法再进行前都要开启事务,结束后都要关闭事务。如果只修饰某个方法则仅对该方法起作用[6]。例如:
  @Transactional
  public class ADaoImpl implements ADao{
  public void delete(){}
  } 将
  @Transactional 标记在类前,则该类中修饰为 public 的方法都将产生事物管理。
  3 结语
  Spring 提供了多样化的事务编程支持,包括编程式事务和声明式事务。声明式事务最大的优点是:不用通过编程的方式就能够管理事务,这样在业务的代码中就不用掺杂事务管理的代码。任何事务处理方式都需要有事务管理器的支持。Spring 的编程式事务比较适合对局部操作进行事务处理。如果应用系统中有大量的事务需要处理,则应该使用声明式事务处理。声明式事务处理实现了事务处理与业务逻辑的分离,声明式事务处理依赖 Spring AOP 的功能。上面所介绍的五种方式中的第一种或第二种实现的事务处理,需要为涉及事务处理的每个 Bean 设置一个代理,配置量大,特别是第一种方式配置量更大,用事务拦截器方式执行效率不够理想。在 Spring2.X 时,一般都采用方式三,主要带来的好处就是配置文件的量变小了。在 Spring2.5 时,可以采用方式五了,方式五基于@Transactional 注解的事务定义方法具有配置简单、编程和执行效率高的特点,并且基本实现了 0 配置,是最理想的方式。
  参考文献:
  [1] 王雨竹,张玉花,张星.SQL Server 2008 数据库管理与开发教程(第 2 版)[M].人民邮电出版社,2012.
  [2] 陈平. 基于 Spring 的轻量级 Web 框架的研究与设计 [D]江苏:江苏大学,2005.
  [3] 龚尚福.龚琴.冯键.基于 SSH 框架的 EPON 性能管理系统的设计与实现[J].计算机应用,2013(2).
  [4] 金导航.基于 Spring 的事务管理研究用[J].电脑知识与技术,2007(11).
  [5] Spring 事务配置的五种方式.http://www.blogjava.net/robbie/archive/2009/04/05/264003.html, 2009.
  [6] 丁振凡.Spring 3.x 的事务处理机制的研究比较[J].微型机与应用,2012(10).



中国论文网(www.lunwenchina.cn),是一个专门从事期刊推广、论文发表、论文写作指导的机构。本站提供一体化论文发表解决方案:省级论文/国家级论文/核心论文/CN论文。

投稿邮箱:lunwenchina@126.com

在线咨询:189308598(QQ) 

联系电话:15295038855(徐编辑)  

 

上一篇 下一篇
0

联系我们