我正在创建将文件从一个文件夹复制到另一个文件夹的基本路由。
我的最终目标是,在我的应用程序中有多个路由,并且每个路由都将作为批处理过程中的一个步骤被调用,一个接一个。因此,我必须为每个路由启动和停止camel上下文。
我写了下面代码
但 Camel 上下文结束之前的完成工作。
我不能将线程置于睡眠状态,因为我不确定该作业需要多长时间
在这方面的任何帮助都将是巨大的帮助。
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()选项,但那也没有帮助。
谢谢
4条答案
按热度按时间yhxst69z1#
Camel的MainSupport类可能正是您想要的。
如果您只希望复制一个文件,则也可以执行以下操作:
将CountDownLatch传递至HdfsRouteBuilder1的建构函式。然后在呼叫ctx.start之后,呼叫CountDownLatch上的wait。
在您的HdfsRouteBuilder1中,在闩锁完成后倒计时。
如果您希望有多个文件,则此方法将不起作用。
nfzehxib2#
请参阅有关独立运行Camel的常见问题解答:http://camel.apache.org/running-camel-standalone.html,特别是该链路:http://camel.apache.org/running-camel-standalone-and-have-it-keep-running.html
7cjasjjr3#
在启动上下文之后,您就显式地关闭了它。这使得它没有足够的时间来接收和处理事件。
start
方法不会阻塞(至少在camel 2中是这样)。你需要在Camel启动后进行阻挡。为此,你有一些选择:
ctx.start();
之后使用Thread.currentThread().join();
进行阻止vddsk6oq4#
您可以在启动camel上下文后使用Thread.sleep(Time_in_milliseconds)。或者您可以使用camel main而不是DefaultCamelContext。