微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

  @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中。有关如何操作的任何想法。我需要在更新和创建时进行类似的修改

解决方法

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

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。