IntegrationFlows с заданием запуска FileReadingMessageSource дважды для одного и того же входного файла - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть пакетное задание Spring Integration, которое запускается при поступлении файлов:

@Bean
public IntegrationFlow fileTriggeredIntegrationFlow() {
    return IntegrationFlows.from(fileReadingMessageSource(),
            c -> c.poller(Pollers.fixedRate(filePollerFrequency, filePollerInitialDelay)))
            .transform(toJobLaunchRequest())
            .handle(jobLaunchingGateway)
            .handle("jobCompletionHandler", "afterJob")
            .get();
}

@Bean
public FileReadingMessageSource fileReadingMessageSource() {
    FileReadingMessageSource sourceReader = new FileReadingMessageSource();
    log.info("Listening for {} files at {}", sourceFilePattern, sourceFileDirectory);
    sourceReader.setDirectory(new File(sourceFileDirectory));
    sourceReader.setFilter(new RegexPatternFileListFilter(sourceFilePattern));
    return sourceReader;
}

Долгое время это было довольно гладко, но недавно я столкнулся с проблемой, когда задания выполнялись дважды для одного и того же входного файла.,Ниже приведен фрагмент из файлов журнала:

2018-12-06 13: 52: 32 595 INFO [ task-scheduler-7 ] osifFileReadingMessageSource: 380 - Создано сообщение: [GenericMessage[payload = / local / MY_INPUT_FILE.DAT, заголовки = {id = ba1ad258-72cf-ed07-1175-3d1cc36f9bc1, отметка времени = 1544122352595}]]

2018-12-06 13: 52: 32 599 INFO [ задача-планировщик-10 ] osifFileReadingMessageSource: 380 - Дата создания сообщение: [GenericMessage [полезная нагрузка = / локальный / MY_INPUT_FILE.DAT, заголовки = {ID = ab8e9fbc-72a1-43e0-2ca3-8b8dcb3d91e5, временная метка = 1544122352599}]]

Если вы видите, что два потока, выделенные жирным шрифтом, подобрали одни и те же файлы и запустили одно и то же задание дважды.Может кто-нибудь подсказать мне, как избежать этих случаев?

1 Ответ

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

Похоже, что тот же файл будет выбран из каталога sourceFileDirectory в следующем цикле опроса.

Вы должны рассмотреть возможность использования AcceptOnceFileListFilter вместе с этим RegexPatternFileListFilter в качестве композиции вCompositeFileListFilter или ChainFileListFilter: https://docs.spring.io/spring-integration/docs/current/reference/html/files.html#file-reading

...