声明式事务@Transactional

myWang / 2023-05-03 / 原文

声明式事务@Transactional失效场景

  • 有异常需要抛出,如果catch异常后没有进行throw那么不会进行事务回滚,因为异常已经被捕获所以对于@Transactional而言方法最终无异常抛出;
    • 方法必须是public修饰符,如果不是public修饰也不会报错,只是注解不会生效(因为动态代理jdk动态代理处理接口不包含非public方法,cglib处理public方法);
    • 通过this调用的方法注解是不生效的,通过this在当前类的内部进行调用不会创建新的代理,因此注解不会生效;
      • springboot通过自动装配的方式提供了事务管理的相关依赖,但是如果我们业务场景复杂并且遇到多数据源场景,那么需要结合实际业务来灵活使用。
      • 使用声明式事务@Transactional的时候,可以通过配置事务管理器(value)和事务传播行为(propagation)的属性来控制满足自己的业务场景。