最近碰到这个问题,在使用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小时内与您取得联系。