Java ApacheCamel-作业结束前关闭上下文
我正在创建将文件从一个文件夹复制到另一个文件夹的基本路径 我的最终目标是,如果我的应用程序中有多个路由,那么每个路由都将作为批处理过程中的一个步骤依次调用。因此,我必须为每条路线启动和停止骆驼上下文 我已经编写了以下代码 但是在完成工作之前就结束了 我不能让线程睡眠,因为我不知道这项工作需要多少时间 这方面的任何帮助都将是巨大的帮助Java ApacheCamel-作业结束前关闭上下文,java,apache-camel,Java,Apache Camel,我正在创建将文件从一个文件夹复制到另一个文件夹的基本路径 我的最终目标是,如果我的应用程序中有多个路由,那么每个路由都将作为批处理过程中的一个步骤依次调用。因此,我必须为每条路线启动和停止骆驼上下文 我已经编写了以下代码 但是在完成工作之前就结束了 我不能让线程睡眠,因为我不知道这项工作需要多少时间 这方面的任何帮助都将是巨大的帮助 public class FileTransporter { public static void main(String[] args) { Hdf
public class FileTransporter {
public static void main(String[] args) {
HdfsRouteBuilder1 anotherRouteBuilder =new HdfsRouteBuilder1();
CamelContext ctx = new DefaultCamelContext();
try{
ctx.addRoutes(anotherRouteBuilder);
ctx.start();
ctx.stop();
} catch(Exception e){
e.printStackTrace();
}
}//end of main method
}
public class HdfsRouteBuilder1 extends RouteBuilder{
@Override
public void configure() throws Exception {
from("file://E:/test/?noop=true")
.threads(1)
.to("file://E:/test1/");
}
}
我还尝试在route中使用oncompletion()选项,但这也没有帮助
谢谢您刚刚启动上下文,就显式关闭了上下文。这使得it没有足够的时间接收和处理事件。
start
方法不会阻塞(至少在camel 2中)
你需要在骆驼开始后拦截。为此,您有一些选择:
- 使用
Thread.currentThread().join()阻塞代码>紧跟在
ctx.start()之后代码>
- 使用camel实用程序类阻止,请参见
如果您希望有多个文件,那么这将不起作用。请参阅此有关独立运行Camel的常见问题解答:特别是此链接:Thread.currentThread().join()将导致程序永不停止。您好,非常感谢您的回复。这解决了50%的问题。我在这里面临的问题是,如何在所有处理完成后手动停止上下文。在执行“main.run()”控件后,不会再次返回到main类。请参阅此常见问题解答:。您可以在文件端点上使用
sendEmptyMessageWhenIdle=true
来知道其为空,然后停止路由或驼峰本身,对于后者,请参见前面的问题,以便在没有更多文件/消息时如何停止驼峰。因此,在这里搜索或谷歌多一点。