关闭

Spring配置中transactionAttributes的使用方法和作用

976人阅读 评论(0) 收藏 举报
分类:
最近碰到这个问题,在使用spring提供的JpaTemplate进行查询时,如果数据量超过100 条,查询效率就会明显降低。由于开始时使用JPA内部的双向关联,造成各实体内部关联过多,从而影响所有的操作,因此怀疑是因为JPA的关联关系所致。但 是去掉关联关系后的效果不显著。 

查找spring的相关配置,发现原来关于“transactionAttributes”有问题。原来的配置如下: 

<bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" 
lazy-init="true" abstract="true"> 
<property name="transactionManager"> 
<ref bean="transactionManager" /> 
</property> 
<property name="transactionAttributes"> 
<props> 
<prop key="sav*">PROPAGATION_REQUIRED</prop> 
<prop key="update*">PROPAGATION_REQUIRED</prop> 
<prop key="delete*">PROPAGATION_REQUIRED</prop> 
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop> 
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop> 
</props> 
</property> 
</bean> 
使用上述配置,在JPA打出的日志中显示每次查询时都要进行更新操作,查阅相关spring 的资料后发现transactionAttributes的各种属性的意义,现把资料分享如下: 

PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。 
PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。 
PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。 
PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。 
PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 
PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。 
PROPAGATION_NESTED--如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。
当前所有的事务都使用“PROPAGATION_REQUIRED”属性值,并且控制事务的操作权限为只读,以保证查询时不会更新数据。根据上述 定义 “PROPAGATION_REQUIRED”属性会造成为所有的操作都创建事务,从而会出现JPA的日志中查询时也会进行更新操作的现象,也就造成了效 率的低下。将所有查询的操作改成事务类型为“PROPAGATION_NEVER”(不使用事务),则查询效率立即提升,但是此时担心一个问题:比如在一 个saveXXX()的方法中,如果方法内部使用更新、查询、再更新的操作流程,会不会造成调用查询时,由于上述配置造成的抛出异常。 

另外,如果出现 

〈prop key="myMethod"〉PROPAGATION_REQUIRED,readOnly,-Exception〈/prop〉 
这样的配置,其中: 

-Exception表示有Exception抛出时,事务回滚. -代表回滚+就代表提交 

readonly 就是read only, 设置操作权限为只读,一般用于查询的方法,优化作用.
0
0
查看评论

Spring配置中transactionAttributes的意义

 最近使用JSF+Spring+OpenJPA框架开发,但是在使用spring提供的JpaTemplate进行查询时,如果数据量超过100条,查询效率就会明显降低。由于开始时使用JPA内部的双向关联,造成各实体内部关联过多,从而影响所有的操作,因此怀疑是因为JPA的关联关系所致。但是去掉关...
  • alex197963
  • alex197963
  • 2009-08-11 11:43
  • 2184

Spring配置中transactionAttributes的意义

<br />  <br /><br />最近使用JSF+Spring+OpenJPA框架开发,但是在使用spring提供的JpaTemplate进行查询时,如果数据量超过100 条,查询效率就会明显降低。由于开始...
  • hbzyaxiu520
  • hbzyaxiu520
  • 2011-05-21 11:27
  • 661

关于Spring配置中transactionAttributes的意义

各位大虾好,小弟最近在看Spring,有谁能解释一下下边的配置么?     class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> &#...
  • z69183787
  • z69183787
  • 2013-12-05 09:57
  • 2283

Spring配置事务中的 transactionAttributes 各属性含义及XML配置

transactionAttributes 属性: PROPAGATION 事务传播行为类型 说明 PROPAGATION_REQUIRED 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。 PROPAGA...
  • z69183787
  • z69183787
  • 2013-12-06 09:50
  • 11034

JSP中的9大内置对象和作用、用法。

Jsp内置对象对象是web容器创建的一组对象,无需使用new关键词实例化,即可调用的内置对象。  9大内置对象包括以下: 1.输出对象out –JspWriter2.请求对象request –ServletRequest3.响应对象reponse –ServletResponse4.配置...
  • fzy198926
  • fzy198926
  • 2017-04-19 23:34
  • 218

transactionAttributes

PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。 PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。 PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。...
  • linxinghui
  • linxinghui
  • 2006-10-25 10:50
  • 792

Make构建工具快速入门及应用

Make是工程构建的必要工具。Make这个词,英语的意思是“制作”。Make命令直接用了这个意思,就是要做出某个文件。比如,要做出文件a.txt,就可以执行下面的命令。 $ make a.txt但是,如果你真的输入这条命令它并不会起作用。因为Make命令本身并不知道,如何做出a.txt,需要有人告...
  • leonliu06
  • leonliu06
  • 2017-11-21 21:20
  • 136

Spring的配置项及其作用分析

Spring bean的一些基础知识。
  • wu631464569
  • wu631464569
  • 2016-07-14 11:59
  • 708

spring配置中parent和abstract作用

以下是转载别人的文章     关于spring中的bean定义,parent属性是什么意思? 1. abstract="true" class="org.springframework.transaction.interceptor.T...
  • lushuaiyin
  • lushuaiyin
  • 2012-04-09 10:24
  • 6159

Spring配置事务中的 transactionAttributes 各属性含义

transactionAttributes 属性: PROPAGATION 事务传播行为类型 说明 PROPAGATION_REQUIRED 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到...
  • ywb201314
  • ywb201314
  • 2015-07-27 17:50
  • 301
    个人资料
    • 访问:9365276次
    • 积分:78495
    • 等级:
    • 排名:第21名
    • 原创:264篇
    • 转载:2871篇
    • 译文:3篇
    • 评论:800条
    文章分类
    最新评论