跨 camel 上下文的全局异常处理程序——覆盖所有路由
Global exception handler across the camel context – covering all routes
我有 10 条骆驼路线,如下所示:
@AllArgsConstructor
public class MyCamelRoute extends RouteBuilder {
/**
* {@inheritDoc}
*/
@Override
public void configure() throws Exception {
}
}
上面的 MyCamelRoute
是使用下面的代码创建的,它将 Camel 路由加载到 Spring 容器中:
@Bean("myCamelRoute")
public RouteBuilder createMyCamelRoute () {
return new MyCamelRoute();
}
现在我需要一个跨 Camel 上下文的全局异常处理程序——覆盖所有路由。
您可以为 Routebuilder 中定义的所有路由定义一个全局异常子句,来自 camel documentation
Global scope for Java DSL is per RouteBuilder instance, so if you want to share among multiple RouteBuilder classes, then create a base abstract RouteBuilder class and put the error handling logic in its configure method. And then extend this class, and make sure to class super.configure(). We are just using the Java inheritance technique.
换句话说,BaseRouteBuilder class 将是:
public abstract BaseRouteBuilder extends RouteBuilder {
@Override
public void configure() {
onException(Throwable.class).log("Excpetion caught");
}
然后是你的路线:
@AllArgsConstructor
public class MyCamelRoute extends BaseRouteBuilder {
/**
* {@inheritDoc}
*/
@Override
public void configure() throws Exception {
super.configure();
// Route Configuration here
}
}
正如所指出的,从子 class 调用 super.configure()
很重要,否则将不会执行异常子句。
我有 10 条骆驼路线,如下所示:
@AllArgsConstructor
public class MyCamelRoute extends RouteBuilder {
/**
* {@inheritDoc}
*/
@Override
public void configure() throws Exception {
}
}
上面的 MyCamelRoute
是使用下面的代码创建的,它将 Camel 路由加载到 Spring 容器中:
@Bean("myCamelRoute")
public RouteBuilder createMyCamelRoute () {
return new MyCamelRoute();
}
现在我需要一个跨 Camel 上下文的全局异常处理程序——覆盖所有路由。
您可以为 Routebuilder 中定义的所有路由定义一个全局异常子句,来自 camel documentation
Global scope for Java DSL is per RouteBuilder instance, so if you want to share among multiple RouteBuilder classes, then create a base abstract RouteBuilder class and put the error handling logic in its configure method. And then extend this class, and make sure to class super.configure(). We are just using the Java inheritance technique.
换句话说,BaseRouteBuilder class 将是:
public abstract BaseRouteBuilder extends RouteBuilder {
@Override
public void configure() {
onException(Throwable.class).log("Excpetion caught");
}
然后是你的路线:
@AllArgsConstructor
public class MyCamelRoute extends BaseRouteBuilder {
/**
* {@inheritDoc}
*/
@Override
public void configure() throws Exception {
super.configure();
// Route Configuration here
}
}
正如所指出的,从子 class 调用 super.configure()
很重要,否则将不会执行异常子句。