Копирование файла SpringIntegration Poller - PullRequest
0 голосов
/ 15 декабря 2018

У меня есть настройка File Poller с исполнителем задач

ExecutorService executorService = Executors.newFixedThreadPool(10);

            LOG.info("Setting up the poller for directory {} ", finalDirectory);
            StandardIntegrationFlow standardIntegrationFlow = IntegrationFlows.from(new CustomFileReadingSource(finalDirectory),
                    c -> c.poller(Pollers.fixedDelay(5, TimeUnit.SECONDS, 5)
                            .taskExecutor(executorService)
                            .maxMessagesPerPoll(10)
                            .advice(new LoggerSourceAdvisor(finalDirectory))
                    ))


                    //move file to processing first processing                    
                    .transform(new FileMoveTransformer("C:/processing", true))
                    .channel("fileRouter")
                    .get();

Я использую AcceptOnceFilter на основе lastUpdated.

Все работает нормально, у меня был каталог, в который я опрашивал файлиз внешней системы.Файл все еще копировался, и приложение подобрало и обработало частичные данные.

Как я могу убедиться, что файл полностью записан перед обработкой.

Я не могу изменить внешнюю систему, так как онипросто скопируйте файлы в папку.Они не изменят свою систему.

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

Я не могу изменить внешнюю систему

Как я могу убедиться, что файл полностью записан перед обработкой.

Вы не можете (надежно).

Предоставляем LastModifiedFileListFilter;Вы также можете отслеживать размер файла, но в любом случае, это хрупкая техника, потому что сбой сети может вызвать паузу в передаче файла.Кроме того, от операционной системы (и механизма удаленного доступа) зависит обновление этих свойств во время копирования файла, что может не всегда иметь место.

0 голосов
/ 15 декабря 2018

Пожалуйста, объедините ваши AcceptOnceFileListFilter с LastModifiedFileListFilter, чтобы эти файлы некоторое время находились в каталоге, прежде чем вы начнете их читать.Таким образом, они могут быть полностью написаны до того, как вы их заберете.

Для получения дополнительной информации см. Документы: https://docs.spring.io/spring-integration/reference/html/files.html#file-reading

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