Spring事务类型祥解

转载 2007年10月08日 11:20:00

大家可能在spring中经常看到这样的定义:


<prop key="load*">PROPAGATION_REQUIRED,readOnly</prop><prop key="store*">PROPAGATION_REQUIRED</prop>

估计有好多朋友还没有弄清楚里面的值的意思,仔细看完下面应该知道自己什么情况下面应该使用什么样的声明。^_^


Spring中常用事务类型:

  • PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
  • PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。
  • PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。
  • PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。
  • PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
  • PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。
  • PROPAGATION_NESTED--如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。

EJB的事务类型:


Nerver :        不参与事务,如果参与产生RemoteException
NotSupported:   不能参与
Supports:       如果调用者正在参与事务,相应的EJB调用也可以参与事务,否则不能
Mandatory       如果调用者有一个事务,相应的EJB可以参与事务,否则,TransactionRequiredException
Required        如果调用者有一个事务,相应的EJB可以参与事务,否则,容器将在调用相应的EJB之前,开始一个事务.
                当方法调用完成以后,即提交该事务.
RequiresNew     在调用相应的EJB之前,开始一个新的事务,当方法调用返回时,即提交这个事务.


  前六个策略类似于EJB CMT:常量名相同,因此,对EJB开发人员来说,应该立刻就感到熟悉。第七个(PROPAGATION_NESTED)是Spring所提供的一个特殊变量。它要求事务管理器或者使用JDBC 3.0 Savepoint API提供嵌套事务行为(如Spring的DataSourceTransactionManager),或者通过JTA支持嵌套事务。

  事务属性中的readOnly标志表示对应的事务应该被最优化为只读事务。这是一个最优化提示。在一些情况下,一些事务策略能够起到显著的最优化效果,例如在使用Object/Relational映射工具(如:Hibernate或TopLink)时避免dirty checking(试图“刷新”)。

  在事务属性中还有定义“timeout”值的选项,指定事务超时为几秒。在JTA中,这将被简单地传递到J2EE服务器的事务协调程序,并据此得到相应的解释。

 

Spring的7种事务传播行为类型

1、PROPAGATION_REQUIRED :如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的设置。 2、PROPAGATION_SUPPORTS:支持当前事务,...
  • hsgao_water
  • hsgao_water
  • 2016年10月19日 16:50
  • 3898

Spring事务管理详解

Spring事务管理详解
  • donggua3694857
  • donggua3694857
  • 2017年04月09日 22:43
  • 2712

那些年spring声明式事务@Transaction的坑

作为开发人员,我相信同学们都会遇到这样的一个业务场景:一个业务方法90%的逻辑都是在做查询,只有最后一部分才是对数据的更新。如果更新失败则业务回滚。常见的做法就是在该方法上加一个@Transactio...
  • y943623901
  • y943623901
  • 2016年03月10日 16:49
  • 7231

Spring事务管理的失效和Proxy类型的DataSource

Spring事务管理的失效和Proxy类型的DataSource          在服务框架中,我们由于需要将DataSource作为第三方服务暴露给其他模块(此处是十分不推荐的,因为如果作为服...
  • wxyFighting
  • wxyFighting
  • 2013年05月07日 09:10
  • 640

Java - Spring支持的事务管理类型有哪些?你在项目中使用哪种方式?

Spring支持编程式事务管理和声明式事务管理。许多Spring框架的用户选择声明式事务管理,因为这种方式和应用程序的关联较少,因此更加符合轻量级容器的概念。声明式事务管理要优于编程式事务管理,尽管在...
  • chimomo
  • chimomo
  • 2017年11月09日 09:53
  • 248

spring事务类型详解

大家可能在spring中经常看到这样的定义: PROPAGATION_REQUIRED,readOnlyPROPAGATION_REQUIRED 估计有好多朋友还没有弄清楚里面的值的意...
  • u011619223
  • u011619223
  • 2015年10月13日 20:06
  • 797

Spring学习-回滚事务之修改默认回滚类型

今天发现了个奇怪的问题,自定义的异常(extens Exception)抛出的异常既然不会滚,然后查了下资料,原来spring默认回滚RuntimeException(及其下所有子类)。 解决办法: ...
  • icoudsoft_saas
  • icoudsoft_saas
  • 2016年08月15日 10:51
  • 498

异常类型 && spring事务回滚

使用spring难免要用到spring的事务管理,要用事务管理又会很自然的选择声明式的事务管理,在spring的文档中说道,spring声明式事务管理默认对非检查型异常和运行时异常进行事务回滚,而对检...
  • xad707348125
  • xad707348125
  • 2015年07月03日 21:56
  • 892

spring事务传播行为类型的常量含义(翻译)

其实很多博客都有介绍,而且比我的简直好太多,但是还是想留下自己的翻译结果,总觉得很多事情,只是看别人的总结,自己不去看源码自己做分析,心里就不够踏实。 package sourcecode....
  • caoxiaohong1005
  • caoxiaohong1005
  • 2017年11月18日 09:49
  • 150

Spring的7种事务传播行为类型

1、PROPAGATION_REQUIRED :如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的设置。 2、PROPAGATION_SUPPORTS:支持当前事务,...
  • hsgao_water
  • hsgao_water
  • 2016年10月19日 16:50
  • 3898
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spring事务类型祥解
举报原因:
原因补充:

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