【发布时间】:2019-11-18 18:14:51
【问题描述】:
我正在使用 oracleDB 和 elasticsearch 进行持久化,如果该方法出现任何问题,它会引发自定义异常。现在,如果弹性也出现任何问题,我需要从 DB 回滚。
我已经在服务类上添加了@transactional 注释。以及我在网络上找到的所有内容。
@Transactional(rollbackOn = BaseException.class)
public void transaction(ab ab, a a) {
persistenceService.save(a);
persistenceService.updateSignalCountDb(a.abc(), a.bcd(), ab);
elasticService.saveSignal(a);
try {
elasticService.updateSignalCountElastic(a);
} catch (Exception e) {
throw new BaseException(ErrorCodes.FAILED_ELASTIC_SEARCH_UPDATE, e);
}
}
persistenceService.save() 方法保存在数据库中。 persistenceService.updateSignalCountDb() 方法更新数据库中的另一个表。 elasticService.saveSignal() 方法保存在弹性中。在失败的情况下抛出基本异常。 elasticService.updateSignalCountElastic() 方法更新弹性中的另一个索引。它还调用 elasticService.delete() 方法来删除保存在 elastic 中的任何内容,以防失败并引发基本异常。
我预计如果整个方法出现任何故障,这将起作用。但是,如果弹性上出现任何故障,我会得到一个基本异常,但我来自 oracle db 的数据不会回滚。
【问题讨论】:
-
检查数据源配置中AUTO_COMMIT是否设置为false。看看stackoverflow.com/questions/7872773/…
标签: java database spring-boot