Spring框架提供了强大的事务管理功能,允许开发者通过注解或XML配置来声明事务边界。@Transactional
是最常用的注解之一,用于指定事务的传播行为、隔离级别以及回滚规则。
rollbackFor
和 noRollbackFor
是 @Transactional
注解中的两个属性,用于定义哪些异常会导致事务回滚,哪些不会。
rollbackFor
: 指定一组异常类,当方法抛出这些异常时,事务会回滚。noRollbackFor
: 指定一组异常类,当方法抛出这些异常时,事务不会回滚。rollbackFor
和 noRollbackFor
,开发者可以精确控制哪些异常会导致事务回滚,从而更好地适应业务需求。noRollbackFor
避免不必要的回滚操作,从而提高系统性能。rollbackFor
: 可以指定一个或多个异常类,如 rollbackFor = {SQLException.class, IOException.class}
。noRollbackFor
: 同样可以指定一个或多个异常类,如 noRollbackFor = {BusinessException.class}
。rollbackFor
和 noRollbackFor
,可以确保在关键业务操作中保持数据一致性,同时避免因非关键异常导致的不必要回滚。问题1: 为什么设置了 rollbackFor
但事务没有回滚?
问题2: 如何处理嵌套事务中的回滚?
PROPAGATION_REQUIRES_NEW
传播行为来创建独立的事务。这样,内部事务的回滚不会影响外部事务。示例代码
@Transactional(rollbackFor = {SQLException.class}, noRollbackFor = {BusinessException.class})
public void transfer(Account from, Account to, double amount) throws BusinessException {
try {
// 执行资金转移操作
} catch (SQLException e) {
// 数据库异常,事务回滚
throw e;
} catch (BusinessException e) {
// 业务异常,事务不回滚
throw e;
}
}
领取专属 10元无门槛券
手把手带您无忧上云