如何在任何异常情况下回滚事务

时间:2020-09-30 07:49:45

标签: spring spring-boot spring-mvc spring-data-jpa spring-transactions

  @Override
  @Transactional(rollbackFor=Exception.class)
  public void deletePerson(String id) throws Exception{
    PersonEntity personEntity = personrepository.findById(id);

    if(personEntity == null){
       throws new Exception("No Person found");
     }

    ElasticPersonEntity elasticPersonEntity = modelMapper.map(personEntity,ElasticPersonEntity.class);

    try{
        personrepository.delete(personEntity);
        elasticpersonrepository.delete(elasticPersonEntity); // Error Occur as Elastic search is down
     }
    catch(Exception ex){
        throws new RuntimeException();
    }
}

在上面的代码中,我必须将Person数据保存在Cassandra和Elastic搜索的两个位置。因此,我也需要对它们都执行删除操作。但是,如果由于某种原因,如果我的弹性搜索失败,则上述代码不会回滚。即数据已从Cassandra中删除,但仍存在于Elastic中。有关如何操作的任何想法。我需要在更新和创建时进行类似的修改。

1 个答案:

答案 0 :(得分:0)

我不明白为什么@Transactional(rollbackFor=Exception.class)不做这项工作,但是正如本topic所述,您可以尝试手动运行回滚

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
相关问题