我正在尝试建立一个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。