Spring事务(2)------事务控制方式(4)事务传播行为

事务传播行为

  • 事务管理员

  • 事务协调员

  • 事务传播行为:描述的是事务协调员对事务管理员所携带事务的处理态度

    就是事务协调员金的事务和事务管理员的事务的关系,也就是事务协调员对事务管理员所带的事务的一个态度

    image-20211013125459154

image-20211013130024164

  • REQUIRED:如果事务管理员开启了一个事务,那么如果事务协调员就会加入这个事务,所以他们两个都是用同一个事务都是T1;如果事务管理员没有开事务,那么事务协调员就会直接新建一个事务

    image-20211013133343269

  • REQUIRES NEW:事务管理员不管开启还是没有开启一个事务,事务协调员都会再新建一个事务

    image-20211013133825401

  • SUPPORTS:如果事务管理员原来有事务,那么事务协调员就会加入这个事务;如果事务管理员原来没有事务,那么事务协调员不会加入,不要事务了

    image-20211013134000153

  • NOT SUPPORTED:原来事务管理员来的时候有没有事务,事务协调员都不会有事务

    image-20211013134121538

  • MANDATORY:必须有事务,事务管理员来的时候带的有事务,事务协调员就会加入这个事务,如果事务管理员来的时候没有事务,那么就会报错

    image-20211013134246416

  • NEVER:不需要带的有事务,事务管理员来的时候如果带了事务,就会出现错误;如果不带事务的话,事务协调员也不会有事务

    image-20211013134400026

  • NESTED:相对于回滚到到之前设置的回滚点

applicationContext.xml的tx配置

 <!--                  TX格式                  -->
    <!--                  TX格式                  -->
    <!--                  TX格式                  -->

    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!--定义事务管理的通知类-->
    <tx:advice id="txAdvice" transaction-manager="txManager">
        <!--定义控制的事务-->
        <tx:attributes>
<!--            所有的操作全部都加读写事务-->
            <tx:method name="*" read-only="false"/>
<!--            get开头的所有操作全部都加只读事务-->
            <tx:method name="get*" read-only="true"/>
            <!--find开头的所有操作全部都加只读事务-->
            <tx:method name="find*" read-only="true"/>
<!--            声明其他的事务操作-->
            <tx:method name="a" read-only="false" propagation="REQUIRED"/>
            <tx:method name="b" read-only="false" propagation="NEVER"/>

            <tx:method
                name="transfer"
                read-only="false"
                timeout="-1"
                isolation="DEFAULT"
                no-rollback-for=""
                rollback-for=""
                propagation="REQUIRED"
                />
            <!--<tx:method name="transfer" read-only="false"/>-->
        </tx:attributes>
    </tx:advice>

    <aop:config>
<!--        com.yy.service中所有以service结尾的接口,中的所有方法,
        即监控接口中所有的方法,对业务层进行精准锁定,就不会出现问题了-->
        <aop:pointcut id="pt" expression="execution(* com.itheima.service.*Service.*(..))"/>
        <aop:pointcut id="pt2" expression="execution(* com.itheima.dao.*.b(..))"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="pt"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="pt2"/>
    </aop:config>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

?abc!

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

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

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

打赏作者

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

抵扣说明:

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

余额充值