完成文件处理后如何停止路由?

时间:2019-05-07 00:16:57

标签: java apache-camel

我正在使用spring应用程序,我的其余端点会将.csv转换为.text和.sem文件。

我可以通过创建骆驼上下文并向其添加路由来做到这一点,但是我正在使用Thread.sleep(miliseconds)来避免线程睡眠并在处理完成后停止。

getCamelContext.addRoutes(new RouteBuilder(){
       public void configure(){
             File folder = new File(filePath);
             File[] listOfFiles = folder.listFiles();
             for (int i = 0; i < listOfFiles.length; i++) 
              {
        if (listOfFile.isFile() && listOfFile.getName().contains(".csv")) {
              from("file:" + fromRoute + listOfFile.getName()).to("file:" + 
              toArchiveRoute + csvArchive).unmarshal(bindy).to("file:" + 
              toTextRoute + txtFileName + ".txt").to("file:" + duplicateTextRoute + txtFileName + ".txt
                      }
          });

getCamelContext.start();
Thread.sleep(5000);
getCamelContext.stop();}

有什么可以摆脱Thread.sleep(毫秒)的东西吗?我厌倦了在阅读Apache骆驼的操作时关闭了路由,但是我无法达到结果。

1 个答案:

答案 0 :(得分:-1)

您可能正在搜索Graceful Shutdown。 在您的情况下,使用DefaultShutdownStrategy就足够了。

某些功能取决于您的骆驼版本,例如个别关闭路线。

带有代码的示例可以在here中找到。

getCamelContext.addRoutes(new RouteBuilder(){
       public void configure(){
             File folder = new File(filePath);
             File[] listOfFiles = folder.listFiles();
             for (int i = 0; i < listOfFiles.length; i++) 
              {
        if (listOfFile.isFile() && listOfFile.getName().contains(".csv")) {
              from("file:" + fromRoute + listOfFile.getName())
              .to("file:" + toArchiveRoute + csvArchive)
              .unmarshal(bindy)
              .shutdownRoute(Defer) //Add this here
              .to("file:" + toTextRoute + txtFileName + ".txt")
              .to("file:" + duplicateTextRoute + txtFileName + ".txt
                      }
          });

我现在无法测试,但是我很确定您必须使用Defer作为策略,因为您正在从数组中读取文件。