@Transaction注解的失效场景

💡 原文中文,约6000字,阅读约需15分钟。
📝

内容提要

使用@Transaction注解时,可以设置事务传播行为、事务隔离级别、超时时间、是否只读等属性,还可以显式声明回滚的异常类型,否则只会回滚RuntimeException及其子类以及Error及其子类,如果事务方法中的异常被catch了,也会使事务失效,如果事务方法没有被Spring 代理对象来调用,或者在同一个类中方法调用,也会使事务失效。

🎯

关键要点

  • 使用@Transaction注解时,可以设置事务的传播行为、隔离级别、超时时间和只读属性。
  • 如果不显式声明回滚的异常类型,默认只会回滚RuntimeException及其子类和Error及其子类。
  • 如果事务方法中的异常被catch,事务将失效。
  • 事务方法必须由Spring代理对象调用,否则事务将失效。
  • 事务传播行为设置不当可能导致事务失效,特别是PROPAGATION_SUPPORTS、PROPAGATION_NOT_SUPPORTED和PROPAGATION_NEVER。
  • 事务的隔离级别定义了事务受其他并发事务影响的程度。
  • 超时时间定义了事务的最长执行时间,超过该时间将自动回滚事务。
  • 只读属性指示事务是否对资源进行只读操作。
  • 可以通过rollbackFor和noRollbackFor属性显式声明需要回滚或不需要回滚的异常类。
  • Spring事务是基于AOP实现的,必须通过Spring代理对象调用才能生效。
➡️

继续阅读