Я пытаюсь построить маршрут Apache Camel, который обрабатывает список строк из таблицы базы данных.
Когда одна строка обрабатывается или есть исключение, я сохраняю запись журнала в другой таблице базы данных. Маршрут обрабатывается и должен откатываться в случае возникновения исключения.
onException(Exception.class)
.process()//create log entity that I want to persist if an error occurs
.to("jpa:"+LogEntity.class.getName()+"?usePersist=true)
.rollback();
from("timer://Timer"+ROUTE_NAME+"?period=15m")
.transacted(Propagation.REQUIRED.name())
.to(// sql to get the
.split().body()
.to() // do stuff that might throw an exception
.end()
.end();
Проблема заключается в том, что в случае возникновения исключения выполняется откат всей транзакции, включая сохранение записи журнала. Мне необходимо сохранить ошибку, несмотря на откат транзакции.
Как добиться сохранения журнала после отката или вне транзакции?
Я пытался использовать markRollbackOnly()
вместо rollback()
, а также для извлечения сохраняющегося журнала в отдельный маршрут, который использует .transacted(REQUIRES_NEW)
- оба безуспешно.
Я использую Spring Boot 2.0.3 и Apache Camel 2.22.0.