Проверка данных файла перед переходом на целевую систему - PullRequest
0 голосов
/ 19 апреля 2019

Я хочу проверить данные (для поддержания целостности данных) внутри файла, используя некоторую логику, перед отправкой в ​​целевую систему.Для этого я использую файлы и их логику файлов с контрольной суммой, например, abc.txt - это оригинальный файл. Abc.txt.checksum - это файл с контрольной суммой.Файл abc.txt.checksum является хешем файла abc.txt и будет использоваться для проверки перед отправкой в ​​целевую систему. Оба файла будут находиться в том же исходном местоположении.У меня есть условие фильтра, чтобы не выбирать файл .checksum во время опроса, так как я не хочу отправлять файл .checksum в целевую систему.После того, как файл abc.txt выбран, я использую одну Java-логику для внутреннего создания хеша этого файла и сохранения его в оперативной памяти, и его необходимо сравнить с данными контрольной суммы (abc.txt.checksum), которые уже существуют.в этом месте.Если обе данные контрольной суммы совпадают, то только целевой файл должен быть перемещен в целевую систему, иначе он не должен обрабатываться и выдает ошибку.Может ли кто-нибудь подсказать мне, как этого добиться?или Как я получу файлы .checksum (abc.txt.checksum), так как они всегда будут в исходной папке?

1 Ответ

0 голосов
/ 19 апреля 2019

То, что вы объясняете, полностью логично для компонента aggregator.

Вы запрашиваете все файлы в каталоге, группируете их по префиксу имени файла.Это можно сделать с помощью выражения SpEL для correlationKey для заголовка сообщения FileHeaders.FILENAME.Таким образом, abc.txt и abc.txt.checksum будут сгруппированы вместе.Затем вы можете создать выходное сообщение из aggregator через MessageGroupProcessor способом, которым checksum хранится в заголовке и с исходным файлом в качестве полезной нагрузки для создания одного сообщения.

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

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

См. дополнительную информацию в Справочном руководстве: https://docs.spring.io/spring-integration/reference/html/#aggregator

ОБНОВЛЕНИЕ

Поскольку вы говорите о двух файлах (оригинале иконтрольная сумма для него), тогда у вас очень просто ReleaseStrategy - (group) -> group.size() == 2.CorrelationStrategy может основываться на заголовке FileHeaders.FILENAME, который присутствует вместе с полезной нагрузкой File после создания FileReadingMessageSource.Эта логика функции может быть такой:

(message) -> message.getHeaders().get(FileHeaders.FILENAME, String.class).replaceFirst("\.checksum", "")
...