我观察到,路由定义中的错误导致了Camel导致应用程序的静默关闭。如何配置骆驼告诉我它到底不喜欢什么。
简单示例:分配重复的路线名称
如果我使用[.id ("route name")
]定义了两个名称不同的路由,则应用程序将启动并报告准备情况。
如果我两次错误地使用了一个名称,则应用程序无法完全启动,并且Camel宣布:
Apache Camel 2.22.0 (CamelContext: camel-1) is shutting down
Apache Camel 2.22.0 (CamelContext: camel-1) uptime 0.332 seconds
Apache Camel 2.22.0 (CamelContext: camel-1) is shutdown in 0.017 seconds
Stopping service [Tomcat]
HikariPool-1 - Shutdown initiated ...
HikariPool-1 - Shutdown completed.
Process finished with exit code 0
退出代码0似乎表明非正常关闭。
当我向路由添加CronScheduledRoutePolicy时,发生了同样的早期关闭。 [例如。 .routePolicy(策略)] 如果添加默认实例或对该策略进行任何设置,它将关闭。
我提高了对数水平,并获得了更多的背景噪音,但没有新发现。 [使用application.yml:日志记录:级别:根目录:DEBUG] 尝试绕过路线定义没有帮助。定义路线时未捕获任何异常。
我试图将CronScheduledRoutePolicy设置为异常处理程序。 [例如。与policy.setExceptionHandler(myCamelExceptionHandlerLoggingEverything)] 什么都没有记录。没有断点被击中。
非常感谢您的帮助或对任何解决方案的引用。
拉尔夫
答案 0 :(得分:2)
有多种打印精确错误的方法,这取决于开发人员如何使用骆驼路线设计应用程序/类。我已经提到了以下示例,该示例将给出您要查找的确切错误。
public class CamelPrintingExample {
public static void main(String[] args) throws Exception {
CamelContext camelContext = new DefaultCamelContext();
try {
camelContext.addRoutes(new RouteBuilder() {
public void configure() {
from("file:C:\\input\\").routeId("demo")
.to("file:C:\\output\\").end();
from("file:C:\\input\\").routeId("demo")
.to("file:C:\\output\\").end();
}
});
camelContext.start();
Thread.sleep(300000);
camelContext.stop();
} catch (Exception camelException) {
camelException.printStackTrace();
}
}
}
通过运行此命令,我得到以下错误。 org.apache.camel.FailedToStartRouteException:由于检测到重复的ID而无法启动路由演示:demo。请更正ID,以使其在所有路线中都是唯一的。
答案 1 :(得分:0)
您可以尝试定义自定义关闭策略。 Read here
答案 2 :(得分:0)
尝试将其添加到您的路线中,然后启动它:
getContext()。setTracing(true);
P.S。您的错误处理程序中也可能存在问题