Spring之事务管理

Spring事务管理的方式

  Spring支持两种事务管理方式:编程式事务和声明式事务。

  • 编程式事务:将事务代码和业务代码放在一起写,这样的耦合性太高, 开发中不建议使用。
  • 声明式事务:将事务代码和业务代码隔离开发,然后通过一段配置将它们组装运行,最后达到事务控制的目的。

  其实声明式事务就是通过AOP原理实现的。

Spring事务管理相关的API

  1. PlatfromTransactionManager(平台事务管理器)

    PlatfromTransactionManager是spring进行事务管理的一个根接口,我们要是用它的实现类来做事务管理。其中它的一个子类(DataSourceTransactionManager)可以对mybatis和jdbcTemplate进行实物管理。

  2. TransactionDefinition(事务定义)
  • 隔离级别:分为ISOLATION_READ_UNCOMMITTED(读未提交),ISOLATION_READ_COMMITTED(读已提交),ISOLATION_REPEATABLE_READ(可重复读),ISOLATION_SERIALIZABLE(串行化)。
  • 传播行为:指的是当一个业务方法被另一个业务方法调用时,应该如何进行事务控制。
    常用的是:PROPAGATION_REQUIRED(必须有事务,这是默认值),如果存在一个事务,则加入到当前事务,如果没有事务则开启一个新事务;PROPAGATION_SUPPORTS(支持有事务),如果存在一个事务,则加入当前事务,如果没有事务则进行非事务运行。
  • 只读性:只读事务不能进行增、删和改的使用,只能查询使用。
  • 超时时长:事务超时时间,该属性需要底层数据库的支持,如果底层数据库不支持计时则无法使用该属性,它的默认值是-1,代表无限制。
  1. TransactionStatus(事务状态)
      TransactionStatus代表的是事务的当前状态。
  2. 三个API之间的关系

  PlatformTransactionManager 通过读取TransactionDefinition中定义事务信息参数,来管理事务,管理之后会产生一些列的TransactionStatus。

声明式事务之XML版配置

<!--事务管理-->
    <bean id="transactionManager"
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!--给事务管理器传递参数-->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <!--
                name  指的是方法名
                isolation="DEFAULT"  事务隔离级别  默认是用数据库的隔离级别
                propagation="REQUIRED"   事务传播行为  默认是必须有事务
                read-only="false"        事务只读  默认是(可读可写)
                timeout="-1"             超时时间  默认不限制
                no-rollback-for=""       指定一种异常,当发生时,事务不回滚
            -->
            <tx:method name="find*" read-only="true"/><!--指定以find开头的方法开启只读事务-->
            <tx:method name="get*" read-only="true"/>
            <tx:method name="*"/>
        </tx:attributes>
    </tx:advice>
    <!--配置切面(切点  +  增强)-->
    <aop:config>
        <!--切点-->
        <aop:pointcut id="pt" expression="execution(* com.itheima.service.impl.*.*(..))"/>
        <!--切面
            advisor  这是一个特殊的切面,只能用于事务控制
            advice-ref  指向的是增强
            pointcut-ref  指向切点
        -->
        <aop:advisor advice-ref="txAdvice" pointcut-ref="pt"/>
    </aop:config>

声明式事之注解版

  • @Transactional:该注解标注在方法上,代表对该方法进行声明式事务管理;标注在类上,表示对该类下所有方法进行声明式事务管理。
  • @EnableTransactionManagement:标注在配置类上,表示开启事务管理,相当于XML中的
    < tx : annotation-driven/>
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JustDoSelf

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

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

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

打赏作者

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

抵扣说明:

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

余额充值