如何在骆驼路线和春季引导中实现OnException和errorHandler?

时间:2019-06-17 12:06:27

标签: spring apache-camel spring-camel

我想使用onExceptionProcessor来捕获我的路由生成器捕获的所有异常并将它们保存在数据库中。

我不知道我是否必须使用onException(Exception.class)或errorHandler()以及如何正确实现它们!

我尝试了try-catch,但是没有捕获到我的异常(我在处理器1中抛出的空指针)。可能是我执行不正确吗?

这是我的routeBuilder:

@component
public class MyRoute extends RouteBuilder {

  @Autowired
  private Processor processor1;  

  @Autowired
  private Processor procssor2;  

  @Autowired
  private Processor processor3;

  @Autowired
  private Processor onExceptionProcessor; // it a processor where i try to save the stacktrace of exception in the database

  @Override
  public void configure() throws Exception {
    from(jmsDecoupageRouteIn)
        .id("route_id_processing").messageHistory().transacted()
        .log(LoggingLevel.DEBUG, log, "It's for just for log").pipeline()
        .process(processor1)
        .id(processor1.getClass().getSimpleName().toLowerCase())
        .process(procssor2)
        .id(procssor2.getClass().getSimpleName().toLowerCase())
        .process(processor3)
        .id(processor3.getClass().getSimpleName().toLowerCase())
        .doTry()
        .to(jmsDecoupageRouteOut)
        .doCatch(Exception.class)
        .log(LoggingLevel.ERROR, "EXCEPTION: ${exception.stacktrace}")
        .process(onExceptionProcessor)
        .id(onExceptionProcessor.getClass().getSimpleName().toLowerCase())
        .endDoTry();
  }
}

1 个答案:

答案 0 :(得分:2)

这是doTry()...doCatch()...end()构造的通用结构。

 from("direct:start")
                    .doTry()
                        .process(new ProcessorFail())
                        .to("mock:result")
                    .doCatch(IOException.class, IllegalStateException.class)
                        .to("mock:catch")
                    .doFinally()
                        .to("mock:finally")
                    .end();

在您的情况下,您使用的是.endDoTry()而不是.end()。它是Camel API中的一个小陷阱。更改它,看看它是否按预期工作。

其他参考

请记住,当您使用doTry()...doCatch()...end()时,常规的骆驼OnException处理程序将无法工作(不能将它们混合在一起)。

更新:与OP共享的屏幕截图 Exception handling processor definition