欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-02-26 22:19:10
最近碰到这个问题,在使用spring提供的jpatemplate进行查询时,如果数据量超过100 条,查询效率就会明显降低。由于开始时使用jpa内部的双向关联,造成各实体内...

最近碰到这个问题,在使用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 微服务项目的推荐部署方式等。感谢大家对本站的支持。