2024 / 9 / 20
@Transactional(rollbackFor = Exception.class)
和 @Transactional
的主要区别在于异常回滚的处理。
1. *@Transactional
*:默认情况下,只会对运行时异常(如 RuntimeException
和 Error
)进行回滚。如果你的方法抛出的是受检异常(如 IOException
),则不会触发回滚。
2. *@Transactional(rollbackFor = Exception.class)
*:无论是运行时异常还是受检异常,都会导致事务回滚。这意味着如果方法内部抛出了任何类型的异常,事务都会被回滚。
如果不添加 rollbackFor
,可能会导致以下问题:
- 某些受检异常未被处理,可能会导致数据不一致,因为事务没有回滚。
- 业务逻辑中的某些错误不会被及时发现,从而影响系统的稳定性。
因此,根据你的业务需求,选择是否添加 rollbackFor
是非常重要的。如果需要确保所有异常都能回滚,使用 rollbackFor
是一种更安全的做法。