0

假设从 Spring 服务中,我想通过客户端调用外部系统,如果该调用失败(引发未经检查的异常),我想记录它,更新 DB 中的订单状态并重新引发要回滚的事务的异常。 ..

我知道下面的示例代码被认为是一种反模式,但我想不出更好的方法来实现这一点……请问有什么意见吗?

public class Service {

@Autowired(required = true)
private Client client;

@Autowired(required = true)
private DAO d;

@Transactional
@Override
public void register(String id) {

     try{
      client.invoke(id);//throws Client unchecked exception
     }
     catch (ClientException e){
         LOG.error (e);
         d.updateStatus(id,"failed");
         throw e;
      }
 }
}
4

1 回答 1

0

如果您抛出异常只是为了使事务回滚,您最好使用它并调用 setRollbackOnly

  TransactionInterceptor.currentTransactionStatus().setRollbackOnly();
于 2013-03-08T11:10:09.930 回答