Spring Transaction - 当没有异常抛出时

时间:2015-10-13 00:53:57

标签: spring

@Transactional
 method() {

  try {
       update1()
       update2()
      }
  catch (Exception ex) {
    // creating a response with error message and error code object        
  }

  return response ( contains response details for update1() and update2() )
}

当update2()失败时,我需要一些帮助来回滚update1()中发生的事务。

当update1()失败时,代码工作正常,因为我们还没有达到update2() 但是当update1()成功并且update2()失败时,我捕获异常以创建响应对象,在catch块中抛出异常不是一个选项,因为我需要创建一个响应对象...在这种情况下..状态为201的update1和状态为500的update2在所有状态500上显示.. ..

请帮助......

2 个答案:

答案 0 :(得分:0)

我刚发现的一个解决方案如下,对我有用。 如果此解决方案有替代方案,请与我们联系。感谢

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/transaction.html

在我的catch块中添加以下内容 -

TransactionAspectSupport.currentTransactionStatus()使用setRollbackOnly();

答案 1 :(得分:0)

您可以使用TransactionTemplate获得更细粒度的交易。

TransactionTemplate tt = new TransactionTemplate(tx);
tt.execute(new TransactionCallbackWithoutResult(){
   @Override 
   protected void doInTransactionWithoutResult(TransactionStatus status){
     ...
   }
}

您不需要为回滚抛出异常。使用TransactionStatus,您可以调用setRollbackOnly通知事务唯一可能的结果是回滚。