Je me demandais si quelqu'un sait si je pourrais utiliser le service de surveillance dans un FileInboundChannelAdapter avec un LastModifiedFileListFilter?Printemps Poller File d'intégration avec Watch Service et LastModifiedFileListFilter
Le code exemple ci-dessous me donne des résultats assez contradictoires. Parfois, le fichier se trouve simplement dans le dossier et reste non traité.
Je soupçonne que le service de surveillance pourrait être incompatible avec le LastModifiedFileListFilter. Par exemple
- Si le LastModifiedFileListfilter est configuré pour rechercher des fichiers au moins 5 secondes vieux et le Poller est réglé sur une interrogation toutes les 10 secondes.
- A la 9ème seconde, un fichier a pu être créé dans le dossier surveillé.
- A 10 secondes, le Poller interroge le service de surveillance pour savoir ce qui a changé au cours des 10 dernières secondes.
Il trouve le fichier nouvellement créé. Le nouveau créé a un temps de dernière modification de -1 seconde, donc ne le traite pas.
- À 20 secondes, le scrutateur interroge une seconde fois le service de surveillance , cette fois il ne voit pas le fichier non traité comme il a été créé il y a plus de 10 secondes.
Est-ce que quelqu'un d'autre a une expérience avec cela? Y aurait-il une façon recommandée de contourner ce problème et de me permettre de vérifier que le dossier a été entièrement écrit avant de continuer?
@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));
}
Merci!
Merci Artem, J'ai connecté INT-4351. – yfl
Hi Artem, il semble qu'il ne soit pas possible d'utiliser un scanner de répertoire différent de celui par défaut. S'il vous plaît voir bug: INT-4352. – yfl
Juste pour clarifier, la raison pour laquelle j'avais besoin du service de surveillance est que je peux ramasser les modifications apportées aux fichiers dans les sous-répertoires. Je suis allé avec le service de surveillance comme c'était la recommandation par les docs de printemps. Cependant, après avoir rencontré le problème ci-dessus, je voulais passer à un RecursiveLeafOnlyDirectoryScanner. C'est alors que j'ai remarqué que vous ne pouvez pas utiliser un scanner différent. – yfl