全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Spring配置中transactionAttributes的使用方法介绍

最近碰到这个问题,在使用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, 设置操作权限为只读,一般用于查询的方法,优化作用.

总结

以上就是本文关于Spring配置中transactionAttributes的使用方法介绍的全部内容,希望对大家有所帮助。感兴趣的朋友可以参阅:浅谈Springboot之于Spring的优势 、  Spring事务传播属性和隔离级别详细介绍  、 浅谈Spring Boot 微服务项目的推荐部署方式等。感谢大家对本站的支持。


# Spring配置  # transactionAttributes  # spring  # mybatis事务管理配置与@Transactional注解使用详解  # Spring事务Transaction配置的五种注入方式详解  # Spring中配置Transaction与不配置的区别及说明  # 抛出  # 浅谈  # 挂起  # 这是  # 关联关系  # 就会  # 是因为  # 也会  # 都要  # 也就  # 会不会  # 这个问题  # 感兴趣  # 就把  # 详细介绍  # 造成了  # 一个问题  # 在一  # 则在  # 就以 


相关文章: 如何在沈阳梯子盘古建站优化SEO排名与功能模块?  上海网站制作网站建设公司,建筑电工证网上查询系统入口?  网站制作服务平台,有什么网站可以发布本地服务信息?  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  如何在IIS中新建站点并配置端口与物理路径?  想学网站制作怎么学,建立一个网站要花费多少?  网站建设设计制作营销公司南阳,如何策划设计和建设网站?  建站之星如何实现PC+手机+微信网站五合一建站?  C++中引用和指针有什么区别?(代码说明)  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  贸易公司网站制作流程,出口贸易网站设计怎么做?  定制建站平台哪家好?企业官网搭建与快速建站方案推荐  如何在Tomcat中配置并部署网站项目?  宝塔新建站点为何无法访问?如何排查?  建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析  建站之星各版本价格是多少?  成都网站制作公司哪家好,四川省职工服务网是做什么用?  北京网站制作的公司有哪些,北京白云观官方网站?  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  高性能网站服务器部署指南:稳定运行与安全配置优化方案  免费制作小说封面的网站有哪些,怎么接网站批量的封面单?  如何通过.red域名打造高辨识度品牌网站?  制作门户网站的参考文献在哪,小说网站怎么建立?  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  上海网站制作开发公司,上海买房比较好的网站有哪些?  网站制作免费,什么网站能看正片电影?  如何获取上海专业网站定制建站电话?  建站之星客服服务时间及联系方式如何?  C#如何序列化对象为XML XmlSerializer用法  如何快速搭建自助建站会员专属系统?  建站主机与服务器功能差异如何区分?  建站之星安全性能如何?防护体系能否抵御黑客入侵?  建站主机功能解析:服务器选择与快速搭建指南  个人网站制作流程图片大全,个人网站如何注销?  香港服务器建站指南:免备案优势与SEO优化技巧全解析  如何通过西部建站助手安装IIS服务器?  广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  网站按钮制作软件,如何实现网页中按钮的自动点击?  网站制作公司排行榜,四大门户网站排名?  如何通过商城免费建站系统源码自定义网站主题?  如何挑选最适合建站的高性能VPS主机?  如何通过IIS搭建网站并配置访问权限?  阿里云网站制作公司,阿里云快速搭建网站好用吗?  如何选择建站程序?包含哪些必备功能与类型?  Android滚轮选择时间控件使用详解  建站之星如何助力企业快速打造五合一网站?  c# F# 的 MailboxProcessor 和 C# 的 Actor 模型  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  建站之星后台密码遗忘如何找回? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。