Spring Integration: всегда поддерживать порядок после каждого обработанного файла - PullRequest
0 голосов
/ 08 мая 2018

Я хочу использовать SI для импорта данных в мое приложение, чтения их из файлов XML. Я довольно новичок в этой технологии, но думаю, что она идеально подходит для моего случая использования.

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

Для простоты, скажем, у меня есть 2 типа файлов, скажем A и B. Я использую компаратор для поддержания порядка:

<int-file:inbound-channel-adapter id="someId"
        directory="file:${folderPath}"
        filter="myFilter"
        auto-startup="true"
        comparator="myFileComparator">
    <int:poller fixed-rate="1000" time-unit="MILLISECONDS" max-messages-per-poll="1" />
</int-file:inbound-channel-adapter>

Пока все хорошо, работает как интенден. Если я поместил 5 файлов в A B B A B, он импортируется в порядке A A B B B.

Но теперь рассмотрим следующий сценарий : когда SI обработал A A B и уже начал обработку второго B, я решил добавить еще один A файл. Это означает, что теперь уже находится в процессе - B осталось, плюс старый-последний- B и мой новый-A. Я ожидаю, что следующий импорт будет новым A после того, как уже выполняется процесс B. В результате A A B B A B. (A A B B уже были "установлены" до того, как я добавил новые файлы, а A B впоследствии должен поддерживать порядок).

Но это не так. Результат A A B B B A. Мой A был просто брошен в конце, после первой партии файлов.

Полагаю, Spring получает только один раз, сначала видит A A B B B и помещает его во внутреннюю очередь. И только после обработки всей очереди он снова заглядывает в папку и восстанавливает процесс. Это правда? Как я могу изменить это и достичь желаемого результата?

1 Ответ

0 голосов
/ 08 мая 2018

Вам нужно включить scan-each-poll параметр:

 <xsd:attribute name="scan-each-poll" default="false">
            <xsd:annotation>
                <xsd:documentation>
                    Set this flag if you want to make sure the internal queue is
                    refreshed with the latest content of the input directory on each poll.
                </xsd:documentation>
            </xsd:annotation>
            <xsd:simpleType>
                <xsd:union memberTypes="xsd:boolean xsd:string"/>
            </xsd:simpleType>
        </xsd:attribute>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...