Spring @Transactional注解使用注意事项

时间:2022-10-28 20:36:35
1

注意设置rollbackFor属性,很多博客说默认只有RuntimeExcetion会触发回滚,经验证确实如此,所以rollbackFor最好应该设置如下:rollbackFor = {Exception.class},当然具体业务具体处理,可能有的业务抛出的某些异常并不需要触发回滚,所以此时应该细化处理异常。


2

MySQL数据库表引擎应为InnoDB,否则不支持事务。但是XML tx/aop形式配置的事务似乎在引擎为MyISAM时也有效,我猜测这是不是Spring在应用层做了处理?


3

XML tx/aop配置事务,慎用<tx:method name=”*” />这样的配置,Spring官网对该配置的注释是:

<!-- other methods use the default transaction settings (see below) -->

表示其他所有方法都使用默认配置的事务。经验证,确实是其他所有方法都被加上了默认配置的事务。有时我们并不想把其他所有方法都加上事务,因为事务多少是会影响性能的。


4

事务只有配置在public方法上,且是被外部调用时才有效,也就是说:事务配置在private和protected方法上肯定是没有用处的;事务配置在public方法上,但该public方法被内部调用时事务也是无效的。