spring关于“transactionAttributes”的相关配置

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="insert*">PROPAGATION_REQUIRED,-Exception</prop> 
<prop key="update*">PROPAGATION_REQUIRED,-Exception</prop> 
<prop key="delete*">PROPAGATION_REQUIRED,-Exception</prop> 
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop> 
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop> 
</props> 
</property> 
</bean>  


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


另外 
-Exception表示有Exception抛出时,事务回滚. -代表回滚      +就代表提交 
readonly 就是read only, 设置操作权限为只读,一般用于查询的方法,优化作用.
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当使用Hibernate和Spring事务管理器时,可以使用TransactionProxyFactoryBean和DataSourceTransactionManager两个类。在配置时,需要在Spring配置文件中定义TransactionProxyFactoryBean,并将其与DataSourceTransactionManager关联。 具体配置步骤如下: 1. 配置数据源 在Spring配置文件中,需要配置数据源。例如: ```xml <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/test"/> <property name="username" value="root"/> <property name="password" value="root"/> </bean> ``` 2. 配置事务管理器 在Spring配置文件中,需要配置DataSourceTransactionManager作为事务管理器。例如: ```xml <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> ``` 3. 配置TransactionProxyFactoryBean 在Spring配置文件中,需要配置TransactionProxyFactoryBean,它用于创建代理对象并将事务管理器与代理对象关联。例如: ```xml <bean id="userService" class="com.example.UserService"> <property name="userDao" ref="userDao"/> </bean> <bean id="userDao" class="com.example.UserDao"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <bean id="txProxyTemplate" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager" ref="transactionManager"/> <property name="target" ref="userService"/> <property name="proxyInterfaces" value="com.example.UserService"/> <property name="transactionAttributes"> <props> <prop key="*">PROPAGATION_REQUIRED</prop> </props> </property> </bean> ``` 在上面的配置中,txProxyTemplate是一个TransactionProxyFactoryBean对象,它将userService作为目标对象,并将其与transactionManager关联。同时,它还指定了代理对象要实现的接口和事务属性。 4. 使用代理对象 在使用事务时,需要使用TransactionProxyFactoryBean创建的代理对象。例如: ```java ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml"); UserService userService = (UserService) context.getBean("txProxyTemplate"); userService.updateUser(user); ``` 以上就是Hibernate和Spring同时使用TransactionProxyFactoryBean和DataSourceTransactionManager事务管理器的配置方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值