Будет ли прослушиватель Spring Integration принимать файл при передаче файла на полпути? - PullRequest
0 голосов
/ 11 февраля 2019

Добрый день,

Я использую Spring интеграции 2.2 для сборки слушателя в папку.Могу ли я узнать, как я могу проверить, подхватит ли мой слушатель файл при передаче файла на полпути?Или он будет ждать, пока весь файл не будет передан?

Допустим, существует TXT-файл объемом 10 МБ, но из-за медлительности интернета для передачи файла в папку требуется 10 секунд.Допустим, на 5-й секунде, файл только передал 5 МБ, но осталось еще 5 МБ, возможно ли, чтобы слушатель взял файл и обработал?

Вот часть моего кода слушателя в xml:

<int-file:inbound-channel-adapter id="hostFilesIn" directory="${hostfile.dir.in}" 
         prevent-duplicates="true"  filename-regex="${hostfile.in.filename-regex}">
        <int:poller id="poller" fixed-rate="${poller.fixrate:15000}" max-messages-per-poll="1" />
    </int-file:inbound-channel-adapter>

Дайте мне знать, если потребуется дополнительная информация.

Вот проблема, которая возникает:

Из журнала видно, что файл добавляется в очередь,

2019-02-01 11:13:33.011 [task-scheduler-9] DEBUG org.springframework.integration.file.FileReadingMessageSource - Added to queue: [/apps/NAS/ftp/in/incompleteL041.TXT]

После этого появляется следующая ошибка:

2019-02-01 11:13:33.096 [task-scheduler-9] DEBUG c.c.c.c.g.a.auditservice.SimpleErrorIdResolver - ERROR MESSAGE7 : 
java.io.FileNotFoundException: /apps/NAS/ftp/in/incompleteL041.TXT (A file or directory in the path name does not exist.)

Это потому, что, когда файл завершит передачу, он переименует его в L041.TXT.

Пожалуйста, сообщите.

1 Ответ

0 голосов
/ 11 февраля 2019

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

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

Что-то вроде этого регулярного выражения ^(incomplete).*?\.TXT должно работать для вас в текущем объяснении.

...