声明式事务

8、声明式事务

8.1、事务ACID原则

参考万里顾—程的博客

  • 原子性(atomicity)
    • :事务中包括的操作要么都做,要么都不做
  • 一致性 (consistency)
    • :针对一个事务操作前与操作后的状态一致
  • 隔离性(isolation)
    • :一个事务的执行不能被其他事务干扰
    • 造成的问题:
      1. 脏读:指一个事务读取了另外一个事务未提交的数据
      2. 不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不同(数据内容不一致)
      3. 幻读:是指在一个事务内读取到了别的事务插入的数据,导致前后读取到的数据不一致
  • 持久性 (durability)
    • :指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的,不可逆的
      1. 如果在操作之前(事务还没有提交)服务器宕机或者断电,那么重启数据库之后,数据状态还是操作之前的,恢复到原状
      2. 如果在操作后(事务已经提交)服务器宕机或者断电,那么重启数据库之后,数据状态应为操作之后的,持久化到数据库

8.2、spring中配置声明式事务

  • 配置声明事务

    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
    </bean>
  • 结合AOP实现事务的织入

  • 配置事务通知

    <tx:advice id="transactionInterceptor" transaction-manager="transactionManager">
    <tx:attributes>
    <!-- 需要开启事务订单方法 -->
    <!-- 传播特性 propagation 默认是REQUIRED-->
    <!-- read-only="true"表只读事务-->
    <tx:method name="queryAllUser" propagation="REQUIRED"/>
    <tx:method name="deleteUserById" propagation="REQUIRED"/>
    <tx:method name="addUser" propagation="REQUIRED"/>
    <tx:method name="*"/>
    </tx:attributes>
    </tx:advice>
    • propagation

      传播行为(PROPAGATION) 描述
      PROPAGATION_REQUIRED 如果当前没有事务,就新建一个事务,如果已存在一个事务中,加入到这个事务中,这是最常见的选择。
      PROPAGATION_SUPPORTS 支持当前事务,如果没有当前事务,就以非事务方法执行
      PROPAGATION_MANDATORY 使用当前事务,如果没有当前事务,就抛出异常
      PROPAGATION_REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起
      PROPAGATION_NOT_SUPPORTED 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起
      PROPAGATION_NEVER 以非事务方式执行操作,如果当前事务存在则抛出异常
      PROPAGATION_NESTED 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED 类似的操作

      原文链接:https://blog.csdn.net/zhangsweet1991/article/details/83897211

  • 事务的切入 ,我用的这个版本spring开启事务的时候需要把proxy-target-class="true"开启cglib的方式

    <!-- - 事务的切入-->
    <aop:config proxy-target-class="true">
    <aop:pointcut id="txPointcut" expression="execution(* com.mhy.mapper.*.*(..))"/>
    <aop:advisor advice-ref="transactionInterceptor" pointcut-ref="txPointcut"/>
    </aop:config>
posted @   水三丫  阅读(47)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示