Java Camel Main处理大文件并停止路由并退出JVM

Java Camel Main处理大文件并停止路由并退出JVM,java,apache-camel,Java,Apache Camel,我需要使用这两个案例来处理大文件 1从文件目录中提取并推送到FTP 2从一个FTP拉出并推送到另一个FTP 我正在创建一个java maven依赖项目,该项目使用camel组件来处理上述文件传输用例,因此我决定使用org.apache.camel.main.main类来启动我的路由,但问题是,即使成功处理文件,我的程序也没有关闭。我在某个地方读到,使用System.exit可以解决问题,但问题仍然存在 我的代码- Main camelMain = new Main(); camelMain.en

我需要使用这两个案例来处理大文件 1从文件目录中提取并推送到FTP 2从一个FTP拉出并推送到另一个FTP

我正在创建一个java maven依赖项目,该项目使用camel组件来处理上述文件传输用例,因此我决定使用org.apache.camel.main.main类来启动我的路由,但问题是,即使成功处理文件,我的程序也没有关闭。我在某个地方读到,使用System.exit可以解决问题,但问题仍然存在

我的代码-

Main camelMain = new Main();
camelMain.enableHangupSupport();
camelMain.addRouteBuilder(getRouteBuilderLocaltoFTP());
camelMain.run();
路由生成器

public void configure() throws Exception { 
    from(<File-Path>).routeId("local-to-ftp")
    .onCompletion().process(new Processor() {
                @Override
                public void process(Exchange exchange) throws Exception {
                    exchange.getContext().stop();       
                }
            })
            .toD(<FTP-Path>); 
还尝试使用控制总线 .toFcontrolbus:route?routeId=%s&action=stop&async=true,ftp本地

但在这两种情况下,routes都在优雅地关闭,而不是关闭程序


在这方面寻求帮助。

记录了各种正常关机的方法。您可以尝试使用此代码关闭特定路由

camelContext.getRouteController().stopRoute("routeId");
camelContext.removeRoute("routeId");

您可以在main上配置在X个时间段后关闭应用程序,或在处理N条消息后关闭应用程序。您可以将两者设置为AFAIR,例如2分钟后关机,以及处理1条消息后关机


只需检查camelMain上的方法。请注意,这需要最新版本的Apache Camel。

感谢您的回复。我通过使用单独的停机路线解决了这个问题,并从主路线调用了这个停机路线,它工作得很好。