在使用
@Transactional
注解进行声明式事务管理时,通常情况下,事务会在方法抛出未捕获的异常时自动回滚。但有时你可能需要在方法的某个条件下主动触发事务回滚,而不依赖于异常的抛出。
示例:
@Service
@Transactional
public class DemoServiceImpl implements DemoService {
@Transactional(propagation = Propagation.REQUIRES_NEW)
public CommVO<InitVO> init() {
// 假设这里要回滚事务
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return null;
}
Propagation.REQUIRES_NEW
表示每次调用被注解的方法时都会创建一个新的事务。如果当前存在一个事务,它会被挂起,直到被注解的方法执行完毕。
通过
@Transactional
注解来标识一个方法或类应该被包装在一个事务中执行。当某些条件满足时,你可能希望在事务中显式地设置回滚,即使方法本身没有抛出异常,此时可以使用
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
注:回滚后不需要开启新事物