@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中。有关如何操作的任何想法。我需要在更新和创建时进行类似的修改。
答案 0 :(得分:0)
我不明白为什么@Transactional(rollbackFor=Exception.class)
不做这项工作,但是正如本topic所述,您可以尝试手动运行回滚
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();