Apache Camel还会在onException块中回滚SQL

时间:2018-09-04 14:44:34

标签: spring-boot transactions apache-camel

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

0 个答案:

没有答案