如何解决如何在任何异常情况下回滚事务
@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 举报,一经查实,本站将立刻删除。