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方法的小示例。。。我从过去两天开始尝试这个。但无法构建运行示例:(参见此处: