# Spring 中@transactional 的使用

Spring 事务管理分为编程式和声明式的两种方式。编程式事务指的是通过编码方式实现事务;声明式事务基于 AOP,将具体业务逻辑与事务处理解耦。声明式事务管理使业务代码逻辑不受污染, 因此在实际使用中声明式事务用的比较多。声明式事务有两种方式,一种是在配置文件(xml)中做相关的事务规则声明,另一种是基于 @Transactional 注解的方式。

使用Spring的 @Transactional来设置事务时,需要注意:

  1. 注解添加在public方法上才有效
  2. 默认配置下 Spring 只会回滚运行时、未检查异常(继承自 RuntimeException 的异常)或者 Error,如果希望抛出其他异常时也回滚,可通过rollback-for 项设置
  3. 当被注解了 @Transactional的方法被同一个类中的其他方法调用,事务不会生效,只有被另一个类调用才生效。如果想打破这种方式,除非使用AspectJ代替Spring 的AOP。
  4. 如果希望事务中的某个方法即使事务异常时,也不回滚,可通过设置事务的propagation来实现。
  5. mysql默认的事务隔离级别为可重复读,oracle为读已提交。

参考资料:

  1. Spring Boot 中使用 @Transactional 注解配置事务管理
  2. 透彻的掌握 Spring 中@transactional 的使用

猜你喜欢

转载自blog.csdn.net/lj1404536198/article/details/86063631