跨骆驼上下文的全局异常处理程序 - 涵盖所有路由

roc*_*cky 4 spring apache-camel spring-boot camel-ftp spring-camel

我有 10 条骆驼路线,如下所示:

\n
@AllArgsConstructor\npublic class MyCamelRoute extends RouteBuilder {\n\n    /**\n     * {@inheritDoc}\n     */\n    @Override\n    public void configure() throws Exception {\n    }\n}  \n
Run Code Online (Sandbox Code Playgroud)\n

多于MyCamelRoute是使用以下代码创建的,该代码将 Camel 路由加载到 Spring 容器中:

\n
 @Bean("myCamelRoute")\n public RouteBuilder createMyCamelRoute () {\n        return new MyCamelRoute();\n }\n
Run Code Online (Sandbox Code Playgroud)\n

现在我需要在 Camel 上下文 \xe2\x80\x93 上有一个覆盖所有路由的全局异常处理程序。

\n

dan*_*orn 5

您可以从camel文档中为Routebuilder内定义的所有路由定义全局异常子句

Java DSL 的全局范围是每个 RouteBuilder 实例,因此如果您想在多个 RouteBuilder 类之间共享,则创建一个基本抽象 RouteBuilder 类并将错误处理逻辑放入其配置方法中。然后扩展这个类,并确保类 super.configure()。我们只是使用 Java 继承技术。

换句话说,BaseRouteBuilder 类将是:

public abstract BaseRouteBuilder extends RouteBuilder {

@Override
public void configure() {
   onException(Throwable.class).log("Excpetion caught");
}
Run Code Online (Sandbox Code Playgroud)

然后是你的路线:

@AllArgsConstructor
public class MyCamelRoute extends BaseRouteBuilder {

    /**
     * {@inheritDoc}
     */
    @Override
    public void configure() throws Exception {
        super.configure();
        // Route Configuration here
    }
Run Code Online (Sandbox Code Playgroud)

}

super.configure()正如所指出的,从子类调用非常重要,否则异常子句将不会被执行。