SpringBoot – @Transactional(rollbackFor = Exception.class)

@Transactional(rollbackFor = Exception.class) ist ein Parameter der @Transactional-Annotation, der die Bedingungen für das Transaktions-Rollback angibt, d. h. einen Rollback-Vorgang auslöst, wenn eine bestimmte Ausnahme auftritt.

Standardmäßig setzt die Annotation @Transactional die Transaktion nur dann zurück, wenn eine RuntimeException- oder Error-Ausnahme auftritt. Und über das rollbackFor-Attribut können Sie den Ausnahmetyp angeben, den Sie zurücksetzen möchten.

rollbackFor = Exception.class gibt an, dass die Bedingung für das Zurücksetzen der Transaktion darin besteht, dass jede Ausnahmeausnahme oder ihre Unterklasse zurückgesetzt werden muss. Sie können rollbackFor = Throwable.class verwenden, um alle Ausnahmen, einschließlich Fehler, zurückzusetzen. Dieser Vorgang wird jedoch nicht empfohlen, da das Zurücksetzen von Fehler dazu führt, dass die gesamte Anwendung hängt.

Hier ist ein einfaches Beispiel, das zeigt, wie die Annotation @Transactional mit dem Attribut rollbackFor verwendet wird:

@Service
public class UserServiceImpl implements UserService {
    
    

    private final UserDao userDao;

    @Autowired
    public UserServiceImpl(UserDao userDao) {
    
    
        this.userDao = userDao;
    }

    // 添加 @Transactional 注解,并指定回滚条件
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void transferAmount(String fromUser, String toUser, double amount) throws Exception {
    
    
        // 将 fromUser 的钱转到 toUser 的账户
        userDao.updateBalance(fromUser, -amount);
        userDao.updateBalance(toUser, amount);

        // 制造一个异常,测试事务是否回滚
        throw new Exception("手动抛出一个异常,测试事务回滚");
    }
}

Im obigen Beispiel ist die Methode „UserService.transferAmount“ mit @Transactional annotiert und die Rollback-Bedingung ist so angegeben, dass die Transaktion zurückgesetzt werden muss, wenn eine Ausnahme vom Typ „Exception“ auftritt. Wenn der Code, der manuell eine Ausnahme auslöst, in der Methode ausgeführt wird, wird die Transaktion zurückgesetzt, sodass sich der Kontostand des Benutzers nicht ändert. Auf diese Weise können wir sicherstellen, dass der Übertragungsvorgang aufgrund von Anomalien keinen Datenschaden verursacht.

おすすめ

転載: blog.csdn.net/l_010/article/details/131223346