@Transactional与spring通过aop传播事务

一、事务的配置

1、@Transactional的使用配置

需要在配置文件中添加<tx:annotation-driven transaction-manager="事务名称" />才能起作用

如果事务的名称不是默认的transactionManager,那么在使用@Transactional注解的每个地方都要加上该事务名称

2、spring通过aop传播事务配置

    <!-- 事务管理器配置, Hibernate数据源事务 -->
<bean id="transactionManagerUsers" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactoryUsers" />
</bean>

    <tx:annotation-driven transaction-manager="transactionManagerUsers" />
<!-- AOP注入事务 -->
<aop:config>
<aop:pointcut id="servicePointCut" expression="execution(* com.test.users.service..*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="servicePointCut"/>
</aop:config>
<!-- 配置事务传播特性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManagerUsers">
<tx:attributes>
   <!-- all methods starting with 'get/search/find/load' are read-only -->
<tx:method name="get*" read-only="true" propagation="REQUIRES_NEW"/>
<tx:method name="search*" read-only="true" propagation="REQUIRES_NEW"/>
<tx:method name="find*" read-only="true" propagation="REQUIRES_NEW"/>
<tx:method name="loadResourceDefine" read-only="true" propagation="REQUIRES_NEW"/>
<!-- other methods use the default transaction settings (see below) -->
<tx:method name="*"/>
</tx:attributes>
</tx:advice>

那么com.test.users.service包下面的方法都将拥有事务

二、@Transactional与spring通过aop传播配置事务的相互作用

1、使用@Transactional的时候,在同一个类方法下配置多个@Transactional,比如


@Service
public class PerceptionSendNewsManager {

@Transactional(value="transactionManagerMsgs",propagation=Propagation.NOT_SUPPORTED)
public void saveMessage(Tinbox tinbox){
    saveTinbox(tinbox);
 }
    

@Transactional(value="transactionManagerMsgs",propagation=Propagation.REQUIRED)
public void saveTinbox(Tinbox entity) {
        xxxx......
}

那么在调用saveMessage方法的时候,方法saveTinbox的事务是不起作用的,也就是说在同一个类中的方法A调用该类中的其它方法B,B方法定义的事务是不起作用的,

但是如果B方法的事务是通过aop传播配置的,那么B方法的事务还是会起作用

经过测试总结如下

(1)、当一个方法即有配置@Transactional,又包含在spring通过aop传播配置的事务时,@Transactional配置将覆盖spring通过aop传播配置的事务

(2)、当一个类的两个方法A、B,都有注解@Transactional,如果A调用B的话,那么B通过@Transactional配置的事务将不起作用,但是在B方法上通过springaop传播配置的事务会起作用,可以理解为B方法上没有注解@Transactional事务,所以Aop传播的事务将起作用


  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风中情

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值