Как остановить маршрут, когда обработка файлов завершена? - PullRequest
0 голосов
/ 07 мая 2019

Я работаю в приложении Spring, и моя конечная точка отдыха преобразует .csv в файлы .text и .sem.

Я могу это сделать, создав контекст верблюда и добавив в него addRoutes, но я использую Thread.sleep (милисекунды), чтобы избежать спящего потока и остановки после завершения обработки.

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 camel в действии, отключая маршруты, но я не могу достичь результата.

1 Ответ

0 голосов
/ 10 мая 2019

Возможно, вы ищете Изящное завершение работы .Использование DefaultShutdownStrategy должно быть достаточно в вашем случае.

Некоторые функции зависят от версии верблюда, например, индивидуальное отключение маршрутов.

Примеры с кодом можно найти здесь .

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 в качестве стратегии, потому что вы читаете файлы из массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...