博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring事务处理
阅读量:4032 次
发布时间:2019-05-24

本文共 1801 字,大约阅读时间需要 6 分钟。

1、事务的处理交给了spring来管理,要在applicationContext.xml文件中上配置事务管理类:

Xml代码 
  1. //实施事务管理的bean 
  2. <bean id=”transactionManager”  
  3. class=”org.springframwork.orm.hibernate3.HibernateTransactionManager”> 
  4.        <property name=”sessionFactory”> 
  5.            <ref bean=”sessionFactory” /> 
  6. </property> 
  7. </bean> 

它是通过sessionFactory来管理,因此在传进来一个sessionFactory来接管事务处理。

2、 声明式事务处理:

在spring中对事务进行管理时,可以显示地进行事务处理的定义:

Xml代码 
  1. //给事务添加的属性 
  2. <tx:advice id=”txAdvice” transaction-manager=”transactionManager”> 
  3.      <tx:attributes > 
  4. //propagation表示的是事务的传播特性,使用required时,是当检测到add开头的方法时,就看此时有没有开启的事务,如果有则将方法放进事务中去,如果没有,则新建一个事务。然后将方法放进去。 
  5.           <tx:method name=”add*” propagation=”REQUIRED”> 
  6.           <tx:method name=”delete*” propagation=”REQUIRED”> 
  7.            <tx:method name=”update*” propagation=”REQUIRED”> 
  8. //如果检测到其它的方法,则给其只读数据库的属性。即当本方法在读时,其它的方法不能再去写了。保证一个事务的完整性。 
  9.            <tx:method name=”*” read-only=”true”> 
  10. </tx:attributes> 
  11. </tx:advice> 

对于事务的其它传播属性,则可以参考其它文档进行相关的了解。


上一个配置是针对于所有包中类的事务处理方法的设置。下面一段是<aop:config/> 的定义,它确保由 'txAdvice' bean定义的事务通知在应用中合适的点被执行。首先我们定义了 一个切面,它匹配 HibernateDAO 接口定义的所有操作,我们把该切面叫做 'allManagerMethod'。然后我们用一个通知器(advisor)把这个切面与 'txAdvice' 绑定在一起,表示当 'allManagerMethod' 执行时,'txAdvice' 定义的通知事务逻辑将被执行。这就是AOP切面工程:

Xml代码 
  1. <aop:config> 
  2.       <aop:pointcut id=”allManagerMethod”  
  3. expression=”execution(*  com.hejianjiao.hibernate.HibernateDAO.*(..))”/> 
  4. //调用上面配置的事务属性,可以将它给本aop pointcut。 
  5.       <aop:advisor advice-ref=”txAdvice” pointcut-ref=”allManagerMethod”/> 
  6. //如果还有其它的定义,则可以再加上pointcut、advisor来定义本切面点的事务逻辑。 
  7. </aop:config> 

//expression中的内容是要执行本切面的一个接口,中的所有方法:如:一个接口中定义了操作数据的方法:com.hejianjiao.hibernate.HibernateDAO,则下面execution括号中的内容就为:* com.hejianjiao.hibernate.HibernateDAO.*(..)。而如果在com.hejianjiao.hibernate包中还有其它的类也有操作方法,我们要一起定义的话,就可以写为:*  com.hejianjiao.*.*(..),其中(..)表示的是方法,前面的第一个*是操作的接口或者类。

上面的配置将为由 'HibernateDAO' 定义的bean创建一个代理对象,这个代理对象被装配了事务通知,所以当它的相应方法被调用时,一个事务将被启动、挂起、被标记为只读,或者其它(根据该方法所配置的事务语义)。

转载地址:http://idebi.baihongyu.com/

你可能感兴趣的文章
JVM并发机制探讨—内存模型、内存可见性和指令重排序
查看>>
可扩展、高可用服务网络设计方案
查看>>
如何构建高扩展性网站
查看>>
微服务架构的设计模式
查看>>
持续可用与CAP理论 – 一个系统开发者的观点
查看>>
nginx+tomcat+memcached (msm)实现 session同步复制
查看>>
c++指针常量与常量指针详解
查看>>
c++字符数组和字符指针区别以及str***函数
查看>>
c++类的操作符重载注意事项
查看>>
c++模板与泛型编程
查看>>
STL::deque以及由其实现的queue和stack
查看>>
CS4344驱动
查看>>
WAV文件解析
查看>>
DAC输出音乐2-解决pu pu 声
查看>>
WPF中PATH使用AI导出SVG的方法
查看>>
WPF UI&控件免费开源库
查看>>
QT打开项目提示no valid settings file could be found
查看>>
Win10+VS+ESP32环境搭建
查看>>
Ubuntu+win10远程桌面
查看>>
flutter-实现圆角带边框的view(android无效)
查看>>