如何在 RouteTemplate 上添加全局异常处理

问题描述

我正在寻找一种方法来为由多个 RouteTemplates 生成的所有路由添加全局异常处理。我尝试了以下方法,但是 onException 块没有被添加到路由中。

你能帮我理解我做错了什么吗?

谢谢

public abstract class BaseRouteBuilder extends RouteBuilder {
    @Override
    public void configure(){
        this.onException(IllegalStateException.class)
                .log("global onException")
                .maximumRedeliveries(2)
                .redeliveryDelay(100)   
                .logStackTrace(true)
                .to("direct:retryChannel");
    }
}
public static class SampleRouteTemplate extends BaseRouteBuilder {
        @Override
        public void configure() {
            super.configure();
            this.routeTemplate("myTemplate")
                    .templateParameter("parameter1")
                    .from("direct:start")
                    .setHeader("parameter1",constant("value1"))
                    .log("RouteCompleted");
        }
    }

解决方法

尝试为路由提取一个单独的方法,例如configureRoute() 并在 configure() method 的父类中调用它。还要使子类非静态。

public abstract class BaseRouteBuilder extends RouteBuilder {
    @Override
    public final void configure(){
        onException(IllegalStateException.class)
            .log("global onException")
            .maximumRedeliveries(2)
            .redeliveryDelay(100)   
            .logStackTrace(true)
            .to("direct:retryChannel");
            
        configureRoute();
    }
    
    public abstract void configureRoute();
}
public class SampleRouteTemplate extends BaseRouteBuilder {
        @Override
        public void configureRoute() {
            this.routeTemplate("myTemplate")
                .templateParameter("parameter1")
                .from("direct:start")
                .setHeader("parameter1",constant("value1"))
                .log("RouteCompleted");
        }
    }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...