首页 > 其他分享 >@Transactional事务注解失效

@Transactional事务注解失效

时间:2024-02-22 14:55:04浏览次数:23  
标签:事务 调用 Transactional 失效 注解 方法

@Transactional事务注解失效

事务注解失效可能出现在以下几个方面:

  • @Transactional 标注在了非public修饰的方法上 ————事务注解失效
  • @Transactional注解属性propagation设置错误—————事务注解失效
    1. PROPAGATION_SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。
    2. PROPAGATION_NOT_SUPPORTED:以非事务方式运行,如果当前存在事务,则把当前事务挂起。
    3. PROPAGATION_NEVER:以非事务方式运行,如果当前存在事务,则抛出异常。
  • @Transactional 注解属性 rollbackFor 设置错误——————事务注解失效
    1. rollbackFor 可以指定能够触发事务回滚的异常类型。Spring默认抛出了未检查unchecked异常(继承自 RuntimeException 的异常)或者 Error才回滚事务;其他异常不会触发回滚事务。如果在事务中抛出其他类型的异常,但却期望 Spring 能够回滚事务,就需要指定rollbackFor属性。
  • 同一个类中方法调用,导致@Transactional失效
    1. 两个方法 A、B,其中B为被事务注解标注的方法,方法A会调用方法B这种情况——————事务注解失效(不论方法B使用public修饰还是private修饰),但方法A没有声明注解事务,而方法B有,则外部调用方法A之后,方法B的事务是不会起作用的
    2. 但如果使用代理类对象调用方法B那么方法B中的事务生效
  • 异常被你的 catch“吃了”导致@Transactional失效——————事务注解失效
    1. 方法A、B,其中A,B都声明了事务,方法A在调用方法B的时候,方法B抛出异常需要回滚,但是方法A中使用了try…catch 进行了手动处理,这时B方法不再回滚
    2. 所以要想让事务生效需要在catch中重新抛出一个运行时异常, throw new RuntimeException或者注解中指定抛异常类型
  • 数据库引擎不支持事务—————事务注解不生效
  • 被外部调用的公共方法A有两个进行了数据操作的子方法B和子方法C的事务注解说明:
  •  
  • 被外部调用的公共方法A未声明事务@Transactional,子方法B和C若是其他类的方法且各自声明事务,则事务由子方法B和C各自控制
  •  
  • 被外部调用的公共方法A未声明事务@Transactional,子方法B和C若是本类的方法,则无论子方法B和C是否声明事务,事务均不会生效
  •  
  • 被外部调用的公共方法A声明事务@Transactional,无论子方法B和C是不是本类的方法,无论子方法B和C是否声明事务,事务均由公共方法A控制
  •  
  • 被外部调用的公共方法A声明事务@Transactional,子方法运行异常,但运行异常被子方法自己 try-catch 处理了,则事务回滚是不会生效的!

标签:事务,调用,Transactional,失效,注解,方法
From: https://www.cnblogs.com/xiao-ao-jiang-hu/p/18027341

相关文章

  • Java_10 注解与反射
    title:(在线学习平台)link:(https://www.acwing.com/)cover:(https://cdn.acwing.com/media/activity/surface/log.png)1注解(1)注解(Annotation)也被称为元数据(Metadata),用于修饰包、方法、属性、构造器、局部变量等数据信息。(2)注解不影响程序逻辑,但注解可以被编译或运......
  • Android里使用AspectJ实现双击自定义注解
    创建注解首先创建一个双击注解。importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;​/***<pre>*desc:双击*author:刘金*......
  • MogDB 学习笔记之 -- 索引失效
    目录概念描述测试验证知识总结概念描述哪些操作会导致分区表的全局索引失效(比如movepartition,droppartition,truncatepartition,splitpartition,mergepartitions)测试验证1、环境准备CREATETABLEt_ran(user_numberNUMBER(11),start_timetimestamp(0)withoutt......
  • Java注解篇之@SuppressWarnings注解详解 代码编译通过且可以运行,但每行前面的“感叹号
    Java注解篇之@SuppressWarnings注解详解@SuppressWarnings作用:用于抑制编译器产生警告信息。它的注解目标为类、字段、函数、函数入参、构造函数和函数的局部变量,但是建议注解声明在最接近警告发生的位置。去感叹号?我们经常遇到代码编译通过且可以运行,但每行前面的“感叹号”就......
  • 索引优化-失效
     1)like"%",避免使用模糊查询;尽量使用右模糊,例:like"张%";2)避免使用in,notin,连续条件可使用between...and...;3)避免使用or,可用union代替;4)避免使用null判断,可给字段添加默认值0;5)避免where=左侧进行表达式、函数操作;可更改为=右侧;6)数据量大时,避免......
  • ThreadPoolTaskExecutor以及通过注解实现异步任务
    ThreadPoolTaskExecutor是Spring框架的线程池,实现方式如下:1//声明一个name为asyncTaskExecutor的线程池bean到容器中2@Bean("asyncTaskExecutor")3publicExecutorgetAsyncExecutor(){4ThreadPoolTaskExecutorthreadPoolExecutor=newThreadPoolTaskExecuto......
  • JSON相关注解的使用
    1.@JsonInclude当使用json进行序列化时,往往会遇到某个实体对象的属性为null,可以使用如下类注解使得属性值为null的时候Java Bean不参与序列化可以作用在类上,也可以作用在字段上@JsonInclude(JsonInclude.Include.NON_NULL)     其他常量值包括:Include.Include.ALWAYS   ......
  • 通过注解实现本地缓存caffeine的学习
    注解源码如下1@Target(ElementType.METHOD)2@Retention(RetensionPolicy.RUNTIME)3@Documented4public@interfaceRvcCache{5Strngkey();6Stringid()defaultStringUtils.EMPTY;7}1@Component2@Aspect3@RequiredArgsConstructor4......
  • [spring] spring学习笔记(3): 通过注解实现依赖注入
    注解Annotation注解是代码中的一种特殊标记,java中的格式为@Anno_Name(pro=value)注解可以被使用在方法,类和属性上;在spring中,使用注解来实现自动装配,可以简化Bean的配置,基本步骤如下:引入依赖开启组件扫描使用注解定义Bean注入依赖引入依赖在新建的spring项目下的src/main......
  • @RestController和@Controller注解
     @RestController和@Controller是Spring框架中用于定义控制器的两个注解; @RestConteroller注解:@RestController是@Controller的特殊形式,是用于创建RESTfulWeb服务的控制器类,而非传统的Web形式;控制器方法使用@RequstMapping或其他衍生注解来映射url路径,这些数据返回......