java - Apache Camel - 上下文在作业结束前关闭

标签 java apache-camel

我正在创建一个将文件从一个文件夹复制到另一个文件夹的基本路径。

我的最终目标是,如果在我的应用程序中有多个路由,并且每个路由都将作为批处理过程中的一个步骤被调用,一个接一个。所以我必须为每条路线启动和停止 Camel 上下文。

我写了下面的代码。

但是 Camel 上下文在完成工作之前就结束了。

我不能让线程 hibernate ,因为我不确定作业需要多少时间。

在这方面的任何帮助都会有很大的帮助。

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/");
}
}

我也尝试在路由中使用 oncompletion() 选项,但这也无济于事。

谢谢

最佳答案

Camel 的 MainSupport 类可能就是您想要的。

如果您只希望复制一个文件,那么以下方法也可以:

将 CountDownLatch 传递给 HdfsRouteBuilder1 的构造函数。然后在调用 ctx.start 之后调用 CountDownLatch 上的 await。

在您的 HdfsRouteBuilder1 中,完成后对闩锁进行倒计时。

如果您希望有多个文件,那么这将不起作用。

关于java - Apache Camel - 上下文在作业结束前关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44307104/

相关文章:

java - 在 IntelliJ 中设置 JavaFX

java - 声明式事务 (@Transactional) 在 Spring 中不适用于 @Repository

java - JFrame 中的 JPanel 中的 JTextArea 中的 JScrollPane 出现问题

java - 通过复制远程启动/停止 Apache Camel 路由

java - 需要通过 Apache camel-exec 执行带参数的 gzip 命令

java - 使用没有端点的处理器

java - 显示器和外壳的区别

apache-camel - Camel : changing stream encoding

spring-boot - Spring Boot Camel 测试

java - 根据选择动态更改 View 部分内容