Я хочу использовать 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
и помещает его во внутреннюю очередь. И только после обработки всей очереди он снова заглядывает в папку и восстанавливает процесс. Это правда?
Как я могу изменить это и достичь желаемого результата?