4.2. 声明性为回滚配置事务
系统级别错误导致的例外,标记进行回滚的事务,并立即中止事务。您可以使用 @Transactional (dontRollbackOn=SomeException.class) 或 rollbackOn 属性来覆盖默认行为。
先决条件
- 具有 Quarkus Maven 项目。
流程
使用
@Transactional (dontRollbackOn=SomeException.class)指定不回滚事务的异常:src/main/java/org/acme/SantaClauseService.java 示例
import javax.inject.Inject; import javax.enterprise.context.ApplicationScoped; import javax.transaction.Transactional; @ApplicationScoped public class SantaClausService { @Inject ChildDAO childDAO; @Inject SantaClausDAO santaDAO; @Transactional(dontRollbackOn=NonCriticalRuntimeException.class) public void getAGiftFromSanta(Child child, String giftDescription) throws Exception { Gift gift = childDAO.addToGiftList(child); // might throw a NonCriticalRuntimeException gift.setDescription(giftDescription); santaDAO.addToSantaTodoList(gift); } }在本例中,事务上下文被传播到
@Transactional方法中嵌套的所有调用(subDAO.addToGiftList ()和santaDAO.addToSantaTodoList ())。事务提交,除非运行时异常超过方法边界。