本篇文章,我将和大家介绍 Spring 中的一个注解 @Transactional,将介绍一下 @Transactional的基本概念以及具体的使用方法。希望本篇文章能够对对大家的学习有所帮助!
声明式事务管理建立在AOP之上的。其本质是对方法前后进行拦截,
然后在目标方法开始之前创建或者加入一个事务,
在执行完目标方法之后根据执行情况提交或者回滚事务。
简而言之,@Transactional注解在代码执行出错的时候能够进行事务的回滚。





ArithmeticException这个异常类是继承了RuntimeException的-


@Transactional默认回滚RuntimeException和RuntimeException下面的子类抛出的异常


总结一下:@Transactional默认只能回滚RuntimeException和RuntimeException下面的子类抛出的异常 不能回滚Exception异常如果需要支持回滚Exception异常请用@Transactional(rollbackFor = Exception.class)
补充一下@Transactional一些失效的场景
1、不是用public修饰
2、try catch捕获了异常(没有在catch里面手动抛出异常)
3、没有加@Service(也就是没有被 Spring 管理)
4、数据库引擎不支持事务
5、开启多线程任务时,事务管理会受到影响
6、@Transactional 注解属性 rollbackFor 设置错误
rollbackFor 可以指定能够触发事务回滚的异常类型。Spring默认抛出了未检查unchecked异常(继承自 RuntimeException 的异常)或者 Error才回滚事务;其他异常不会触发回滚事务。如果在事务中抛出其他类型的异常,但却期望 Spring 能够回滚事务,就需要指定rollbackFor属性。