У меня есть пакетное задание 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}]]
Если вы видите, что два потока, выделенные жирным шрифтом, подобрали одни и те же файлы и запустили одно и то же задание дважды.Может кто-нибудь подсказать мне, как избежать этих случаев?