1
我想知道是否有人會知道我是否可以在FileInboundChannelAdapter中使用Watch服務以及LastModifiedFileListFilter?與觀察服務和LastModifiedFileListFilter的彈簧集成文件輪詢
下面的示例代碼給了我相當不一致的結果。有時文件只是在文件夾中,並且保持未處理狀態。
我懷疑監視服務可能與LastModifiedFileListFilter不兼容。對於例如
- 如果LastModifiedFileListfilter設置爲尋找文件至少5 秒的歷史,輪詢設置爲每10秒輪詢。
- 在第9秒,可以在監視的文件夾中創建文件。
- 輪詢人員在10秒鐘內查詢手錶服務,以查明過去10秒內發生了什麼變化 。
它找到新創建的文件。
新創建的最後修改時間爲-1秒,所以它 不處理它。
- 20秒鐘後,輪詢人員再次查詢手錶 服務,此時它看不到未處理的 文件,因爲它是在10秒以前創建的。
其他人會有這方面的經驗嗎?有沒有推薦的方法來解決這個問題,並允許我在繼續之前驗證文件是否已經完整寫入?
@Bean
public IntegrationFlow ftpInputFileWatcher()
{
return IntegrationFlows.from(ftpInboundFolder(), filePoller())
.handle()
/*abbreviated*/
.get();
}
private FileInboundChannelAdapterSpec ftpInboundFolder() {
LastModifiedFileListFilter lastModifiedFileListFilter = new LastModifiedFileListFilter();
lastModifiedFileListFilter.setAge(5);
return Files.inboundAdapter(inboundFolder)
.preventDuplicates(false)
.useWatchService(true)
.filter(fileAgeFilterToPreventPrematurePickup());
}
protected Consumer<SourcePollingChannelAdapterSpec> filePoller(){
return poller -> poller.poller((Function<PollerFactory, PollerSpec>) p -> p.fixedRate(2000));
}
謝謝!
謝謝Artem,我已經記錄了INT-4351。 – yfl
嗨Artem,它看起來像是不可能使用除默認以外的其他目錄掃描儀。請參閱錯誤:INT-4352。 – yfl
爲了澄清,我需要監視服務的原因是,我可以在子目錄中選擇文件的更改。因爲這是Spring文檔的建議,所以我和Watch服務一起去了。但是,遇到上述問題後,我想切換到RecursiveLeafOnlyDirectoryScanner。那時我注意到你實際上不能使用不同的掃描儀。 – yfl