Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java CamelContext.start()不';t型块_Java_Blocking_Apache Camel_File Copying - Fatal编程技术网

Java CamelContext.start()不';t型块

Java CamelContext.start()不';t型块,java,blocking,apache-camel,file-copying,Java,Blocking,Apache Camel,File Copying,我想运行一个简单的示例,将文件从一个目录复制到另一个目录: CamelContext context = new DefaultCamelContext(); context.addRoutes(new RouteBuilder() { public void configure () throws Exception { from("file://c:/fromdir/").to("file://c:/todir/"); } }); context.start(); 如果

我想运行一个简单的示例,将文件从一个目录复制到另一个目录:

CamelContext context = new DefaultCamelContext();
context.addRoutes(new RouteBuilder() {

  public void configure () throws Exception {
    from("file://c:/fromdir/").to("file://c:/todir/");
  } 
});
context.start();
如果我使用ApacheCalme2.0.0运行这个示例,程序将在
context.start()之后立即退出并且什么也不做。如果我添加
Thread.sleep(30000)
启动
CamelContext
后,后台线程执行其工作,并将文件从源目录复制到目标目录30秒

但是,如果我使用ApacheCamel 1.6.2运行相同的代码,
start()
方法会自动阻塞,我不需要为了复制文件而让主线程休眠。我没有发现任何迹象表明这种行为从Camel 1.x变为2.x。这真的是我们想要的行为吗?是否可以让start()方法在Camel 2.0.0中阻止执行

谢谢

是的,在camel上下文中调用start()永远不会阻塞线程。这是骆驼2.0的正确行为

您可以使用org.apache.camel.util中的MainSupport类作为阻止的起点,直到在CamelContext上点击ctrl+c或call stop()

参见camel-spring中的Main示例,它扩展了Main支持,并能够从spring XML文件加载camel。

或者您可以添加

Thread.currentThread().join();

在context.start()之后

在Camel 2.2.0中,再次执行start()块。您是否返回了以前的行为?能否提供一个Main方法的小示例。。。我从过去两天开始尝试这个。但无法构建运行示例:(参见此处: