首页 > 其他分享 >事务 - 声明式事务

事务 - 声明式事务

时间:2024-11-02 20:31:28浏览次数:1  
标签:事务 default 异常 回滚 声明 NEW REQUIRES

@Transactional 注解

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Transactional {

	// 指定事务管理器,mybatis 场景下默认的事务管理器是 DataSourceTransactionManager
    @AliasFor("transactionManager")
    String value() default "";

    // 和 value 互为别名
    @AliasFor("value")
    String transactionManager() default "";

    // 传播行为
    Propagation propagation() default Propagation.REQUIRED;

    // 隔离级别,DEFAULT 指使用数据库的
    Isolation isolation() default Isolation.DEFAULT;

    // 超时时间,单位秒,注意不是整个方法的运行时间,而是方法开始到最后一次数据库连接结束的时间
    int timeout() default -1;

    // 是否式只读,如果是只读会做一些优化(不过如果真是只读场景还需要事务吗,大千世界无奇不有,我就遇到到这种场景~~,所以存在即合理)
    boolean readOnly() default false;

    // 哪些异常需要回滚,默认是运行时异常。如果指定,那么回滚的异常就是【运行时异常+指定的异常】,注意是并集不是单单指定的异常
    Class<? extends Throwable>[] rollbackFor() default {};

    // 同上,只不过写异常的全限定名
    String[] rollbackForClassName() default {};

    // 哪些异常不需要回滚,默认是编译时异常,同样如果指定了异常,不回滚的异常就是【编译时异常+指定的异常】
    Class<? extends Throwable>[] noRollbackFor() default {};

    // 同上,不回滚异常的全限定名
    String[] noRollbackForClassName() default {};
}
  • 事务管理器

    TransactionManager 顶级接口没有任何方法,有两个子接口 PlatformTransactionManager 和 ReactiveTransactionManager

    ReactiveTransactionManager:WebFlux 场景下非阻塞式的事务管理器,高大上但是不主流

    PlatformTransactionManager:平台事务管理器,传统的 web 场景,阻塞式编程模型,常用的有如下子类实现

    1. DataSourceTransactionManager:用于管理 JDBC 的事务,mybatis 就是用的 JDBC
    2. JpaTransactionManager:用于 JPA 事务
    3. HibernateTransactionManager:专用于 Hibernate 的事务
  • 传播行为

    事务不生效,或者发生异常时有的回滚有的不回滚

    A{
    	B(){ //REQUIRED
    		F();//REQUIRES_NEW
    		G();//REQUIRED
    		H();//REQUIRES_NEW
    	}
    	C(){ //REQUIRES_NEW
    		I()://REQUIRES_NEW
    		J();//REQUIRED
    	}
    	D(){ //REQUIRES_NEW
    		K();//REQUIRES_NEW
    		L();//REQUIRES_NEW  // 10/0; K,F,H,C(I,J)= ok,E整个代码走不到
    	E(){//REOUIRED
    		M();//REQUIRED // 10/0;F,H,C(I,J),D(K,L) = ok
    		N();//REQUIRES_NEW
    	}
    	int i=10/0; // C(I,J),D(K,L),F,H,N= ok
    }
    
  • 超时时间

    事务配置的超时时间是 3 秒,test 方法整个执行要 10S,数据并不会回滚,因为计算的是方法开始到最后一次事务结束的时间

    @Transactional(timeout = 3)
    public void test{
    
    	// 业务只需要 2S
    	userDao.updateUser(xxx);
        
        // 休眠 10S
    	Thread.sleep(10s);
    }
    

标签:事务,default,异常,回滚,声明,NEW,REQUIRES
From: https://www.cnblogs.com/cyrushuang/p/18487602

相关文章

  • Java常见面试题之事务
    博主介绍上海交大毕业,大厂资深Java后端工程师《Java全套学习资料》作者专注于系统架构设计和高并发解决方案和面试辅导阿里云开发社区乘风者计划专家博主@author[vx]vip1024p(备注java)ACID特性A:原子性,Atomictiy,事务是最小的执行单位,不允许分割,事务的原子性确......
  • Parameters参数、增删改标签、事务、typeAliases
    1.获取传入的参数值1.#{}形式传参,Mybatis会将SQL语句中的#{}转换为问号占位符?  <!--根据商品编号,查询商品信息--><selectid="selectById"parameterType="int"resultType="com.bdqn.pojo.Goods">   select*fromgoodswhereid=#{id}</select......
  • GaussDB数据库事务管理
    ​一、引言事务管理是数据库系统中至关重要的一部分,它确保了数据库的一致性和可靠性。在GaussDB数据库中,事务管理不仅遵循传统的ACID特性,还提供了一些高级功能。本文将深入探讨GaussDB数据库事务管理的各个方面。二、事务的基本概念2.1事务的定义事务是数据库操作的基本单元......
  • GaussDB全局事务管理层(GTM)关键技术方案
    GTM仅处理全局时间戳请求,64位CSN递增,几乎都是CPU++和消息收发操作。不是每次都写ETCD,而是采用定期持久化到ETCD里,每次写ETCD的CSN要加上一个backup_step(100w),一旦GTM故障,CSN从ETCD读取出来的值保证单调递增。当前GTM只完成CSN++,预估可以支持200M/s请求。GTM处理......
  • @Transactional注解管理事务和手动提交事务
    1、@Transacational注解(1)注解里面的属性:propagation:用于设置事务传播属性,该属性类型为Propagation枚举,默认是Propagation.REQUIREDissolation:用于设置事务的隔离级别,该属性类型为Isolation枚举,默认是Isolation.DEFAULTreadOnly:用于设置该方法对数据库的操作是否是只读......
  • 在 ASP.NET Core 中使用 EF Core 进行开启事务工作单元(Unit of Work) 仓储层,服务层模式
    在ASP.NETCore中使用EntityFrameworkCore实现一个带有事务的工作单元(UnitofWork)模式的仓储层和服务层,可以确保在执行多个数据库操作时具有原子性。这样,即使某个操作出现错误,所有操作也可以回滚。以下是如何实现这个模式的详细步骤:定义实体类我们首先定义一个简单的实......
  • ssm+vue的班级事务管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。
    演示视频:ssm+vue的班级事务管理系统(有报告)。Javaee项目,ssmvue前后端分离项目。项目介绍:采用M(model)V(view)C(controller)三层体系结构,通过Spring+SpringMvc+Mybatis+Vue+Maven来实现。MySQL数据库作为系统数据储存平台,实现了基于B/S结构的Web系统。界面简洁,操作简单......
  • ssm班级事务管理系统+vue
    系统包含:源码+论文所用技术:SpringBoot+Vue+SSM+Mybatis+Mysql免费提供给大家参考或者学习,获取源码请私聊我需要定制请私聊目录第一章绪论 11.1选题背景 11.2选题意义 11.3研究内容 2第二章开发环境 32.1Java语言 32.2MYSQL数据库 32.3Eclipse开发......
  • 华为GaussDB数据库包括:事务性(OLTP)数据库、分析型(OLAP)数据库和混合负载(HTAP)数据库
    华为GaussDB数据库包括:事务性(OLTP)数据库、分析型(OLAP)数据库和混合负载(HTAP)数据库。这里需要解释下OLTP、OLAP、HTAP之间的区别,这也是数据库最基本的内容。据库系统一般分为两种类型:一种是面向前台应用的,应用比较简单,但是重吞吐和高并发的OLTP类型;一种是重计算的,对大数据集进行统......
  • GaussDB技术解读——GaussDB架构介绍之全局事务管理层(GTM)关键技术方案
    GTM仅处理全局时间戳请求,64位CSN递增,几乎都是CPU++和消息收发操作。不是每次都写ETCD,而是采用定期持久化到ETCD里,每次写ETCD的CSN要加上一个backup_step(100w),一旦GTM故障,CSN从ETCD读取出来的值保证单调递增。当前GTM只完成CSN++,预估可以支持200M/s请求。GTM处理......