transactionAttributes各属性意义及配置
程序员文章站
2024-02-29 14:59:28
在使用spring提供的jpatemplate进行查询时,如果数据量超过100 条,查询效率就会明显降低。由于开始时使用jpa内部的双向关联,造成各实体内部关联过多,从而影...
在使用spring提供的jpatemplate进行查询时,如果数据量超过100 条,查询效率就会明显降低。由于开始时使用jpa内部的双向关联,造成各实体内部关联过多,从而影响所有的操作,因此怀疑是因为jpa的关联关系所致。但是去掉关联关系后的效果不显著。
配置问题。
<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类似的操作。 |
推荐阅读
-
详解Spring Boot 配置加载顺序及属性加载顺序
-
详解Spring Boot 配置加载顺序及属性加载顺序
-
php3.ini及php.ini配置文件各选项的说明_PHP
-
Spring boot工具类静态属性注入及多环境配置详解
-
Spring boot工具类静态属性注入及多环境配置详解
-
win2012配置DAC环境/用户和设备声明/资源属性及文件分类
-
Scrapy 中 Request 对象和 Response 对象的各参数及属性介绍
-
linux网络的管理,IP地址、网关、DNS的意义及配置方式介绍
-
Java-利用反射访问类的私有(private)属性及方法&private的意义
-
php3.ini及php.ini配置文件各选项的说明_PHP