Spring 事务管理

Spring 事务管理

事务的隔离级别:4个

  • READ_UNCOMMITTED: 读未提交。为解决任何并发问题。

  • READ_COMMITTD: 读已提交。解决脏读,存在不可重复读与幻读

  • REPEATABLE_READ: 可重复读。解决脏读、不可重复读,存在幻读

  • SERIALIZABLE: 串行话。不存在并发问题。

事务超时时间

默认为-1

事务的传播行为:7个

  • PROPAGATION_REQUIRED 指定方法必须在事务内执行 有事务执行 没有事务事务
  • PROPAGATION_REQUIRED NEW 创建一个自己的事务 当前有事务,挂着 新建事务执行完毕 在执行当前事务
  • PROPAGATION_SUPPORTS 支持事务 有事务执行 没有事务也可执行
  • 重点掌握上面三个
  • PROPAGATION_MANDATORY PROPAGATION_NESTED PROPAGATION_NEVER PROPAGATION_NOT_SUPPORTED

事务提交,事务回滚的时机

  • 方法执行没有异常抛出,执行提交事务。 commit
  • 方法执行抛出异常或错误,执行事务回滚。 rollback
  • 方法抛出受查异常时,提交事务 写代码的时候必须处理的异常IOException

总结Spring的事务

  • 管理事务的时 事务管理和他的实现类
  • Spring的事务是一个统一模型
    • 指定要使用的事务管理器实现类,使用
    • 指定那些类,那些方法需要加入事务的功能
    • 指定方法需要的隔离级别,传播行为,超时

Spring框架中提供的处理事务方案

  • 适合中小项目使用的,注解方案

    • spring框架自己用aop实现给业务方法增加业务的功能,使用@Transactional注解增加事务
    • @Transctional注解是spring框架自己的注解,放在public方法的上面,表示当前方法具有事务。可以给注解的属性赋值,表示具体的隔离级别,传播行为,异常信息等
  • 适合大型项目使用的,aspectj 需要大量事务配置事务,使用aspectj框架功能,在spring配置文件中声明类,方法需要的事务。这种方式业务方法和事务配置完全分离。

    • 实现步骤:都是在xml配置文件中实现的

      • 加入依赖

      • 声明事务管理器对象

        <bean id="xx" class="DatasourceTransactionManager">
        
      • 声明方法需要的事务类型(配置方法的事务属性【隔离级别,传播行为,超时】)

      • 配置aop:指定那些类需要代理

        <tx:advice id="myAdvice" transaction-manager="transactionManager">
        	<tx:attributes>
            <!--tx:method:给具体方法配置事务属性,method可以有多个
        		name:方法名称  完整方法名称,可以使用通配符
        		propagation:传播行为,枚举值
        		isolation:隔离级别
        		rollback-for:指定异常的类名,全限定类名。发生异常回滚
        		-->
            	<tx:method name="" propagation="" isolayion="" rollback-for=""/>
            </tx:attributes>
        </tx:advice>
        
        <aop:config>
            <!--配置切入点表达式:指定那些包中类,要使用事务
        		id:切入点表达式的名称,唯一值
        		expression:切入点表达式,指定那些类要使用事务,aspectj会创建代理对象
        	-->
        	<aop:pointcut id="sevicePt" expression="execution=(* *..service..*.*(..))"/>
            <!--配置增强器:关联advice和pointcut-->
            <aop:advicor advice-ref="myAdvice" pointcut-ref="sevicePt"
        </aop:config>
        
  • @Transactional

    • 织入到public方法中,实现事务管理

      • propagation:用于设置事务的传播属性。该属性类型为Propagation枚举,默认值为 Propagation_REQUIRED
      • isolation: 用于设置事务的隔离级别。该属性类型为laolation枚举。默认值为isolation.DEFAULT
      • readOnly:用于设置该方法对数据库的操作是否是只读的。该属性为boolean,默认值false
      • timeout:用于设置本操作与数据库连接的超时时限。单位为秒,类型为int,默认值为-1,即没有时限
      • rollbackFor:执行需要回滚的异常类。类型为CLass[] ,默认值为空数组。
      • rollbackForClassName:指定需要回滚的异常类类名,类型为String[],默认值为空数组
      • noRollbackFor:发生异常不回滚
      • noRollbackForClassName:发生不回滚
    • 事务@Transactional步骤:

      • 需要声明事务管理器对象:

        <bean id="xx" Class="DataSourceTransactionManager"/>
        
      • 开启事务注解驱动,告诉spring框架,我要使用注解方式管理事务。

posted @   Tian-Jotian-Yongxing  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
点击右上角即可分享
微信分享提示