Java markRollbackOnly()在Camel 2.0中不起作用

Java markRollbackOnly()在Camel 2.0中不起作用,java,spring-boot,transactions,apache-camel,rollback,Java,Spring Boot,Transactions,Apache Camel,Rollback,我需要从服务器上删除文件,然后从数据库中删除。 我正在使用ApacheCamel和spring boot。 我在Apache Camel Route中使用了Transact()方法,但是如果数据库中有任何错误,则markRollbackOnly()方法将删除该文件 我的路线看起来像 from(RouterConstants.DIRECT_DELETE_FILE) .onException(Exception.class) .handled(true) .setBody(s

我需要从服务器上删除文件,然后从数据库中删除。 我正在使用ApacheCamel和spring boot。 我在Apache Camel Route中使用了
Transact()
方法,但是如果数据库中有任何错误,则
markRollbackOnly()
方法将删除该文件

我的路线看起来像

from(RouterConstants.DIRECT_DELETE_FILE)
    .onException(Exception.class)
    .handled(true)
    .setBody(simple(RouterConstants.EXCEPTION_PROPERTY))
    .to(RouterConstants.BEAN_GLOBAL_EXCEPTION_HANDLER_METHOD_GENERIC_EXCEPTION_HANDLER)
    .to(RouterConstants.ROUTE_WRITE_AS_JSON)
    .setHeader(Exchange.HTTP_RESPONSE_CODE, constant(HttpStatus.SC_BAD_REQUEST))
    .setHeader(Exchange.CONTENT_TYPE, constant(MediaType.APPLICATION_JSON_VALUE))
    .markRollbackOnly()
    .end()
.routeId("directRouteDeleteFileId")
.transacted()
    //1. sftp delete
    .to(RouterConstants.DIRECT_ROUTE_SFTP)
    //2. db delete
    .setBody(header("id"))
    .convertBodyTo(Long.class).throwException(new RuntimeException())
    .to(RouterConstants.ROUTE_DELETE_FILE_FROM_DB);
当我使用
rollback()
时,它会停止从服务器上删除文件,但不会向最终用户发出正确的消息,并抛出
org.apache.camel.runtimecameleexception:org.apache.camel.rollbackexchangeeexception


你知道如何解决这个问题吗?

我通过改变执行顺序来解决这个问题。DB delete可以与markRollbackOnly()方法配合使用。使用markRollbackOnly()时,SFTP不会回滚文件删除,但数据库删除会回滚