2017-10-12 4 views
0

J'utilise le lot de printemps + intégration de printemps sftp sur mon projet. Je ne veux pas que le téléchargement soit déclenché au démarrage de l'application. Je veux que le processus de téléchargement est déclenché à l'étape 1 et continuer step2 après tous les fichiers télécharger à howt local, pas sûr de mettre en œuvre cetteintégration de printemps sftp: comment déclencher l'action de téléchargement manuellement et faire d'autres choses après le téléchargement terminé?

Répondre

1

Vous devez utiliser <int-sftp:outbound-gateway> avec la commande MGET:

La charge utile du message résultant à partir d'une opération mget est un objet List<File> - une liste d'objets fichier, chacun représentant un fichier récupéré.

Le répertoire distant est fourni dans l'en-tête file_remoteDirectory et le modèle pour les noms de fichiers est fourni dans l'en-tête file_remoteFile.

https://docs.spring.io/spring-integration/docs/4.3.12.RELEASE/reference/html/sftp.html#sftp-outbound-gateway

En Java DSL, il ressemble à:

.handle(Sftp.outboundGateway(sessionFactory(), AbstractRemoteFileOutboundGateway.Command.MGET, 
         "payload") 
         .options(AbstractRemoteFileOutboundGateway.Option.RECURSIVE) 
         .regexFileNameFilter("(subSftpSource|.*1.txt)") 
         .localDirectoryExpression("'" + getTargetLocalDirectoryName() + "' + #remoteDirectory") 
         .localFilenameExpression("#remoteFileName.replaceFirst('sftpSource', 'localTarget')")) 

où le payload est une expression Spel pour l'évaluation de répertoire distant. Dans ce cas, il est vraiment une charge utile de message de demande:

String dir = "sftpSource/"; 
registration.getInputChannel().send(new GenericMessage<>(dir + "*")); 

Si votre répertoire distant est statique et ne change pas du lot, vous pouvez l'utiliser comme LiteralExpression-expresion="'myRemoteDir'" dans la définition XML.

Étant donné que le résultat de cette commande MGET est un List<File>, vous devez envisager d'utiliser Splitter comme étape suivante.

+0

Salut @Gary, j'ai essayé la passerelle sortante avec la commande mget sur [ce post] (https://stackoverflow.com/questions/46707544/how-to-use-sftp-outbound-gateway-mget-command -to-download-files), je veux utiliser java config mais je suis toujours confronté à un problème, j'ai lu les docs et l'exemple de github, mais je n'arrive toujours pas à le résoudre, pouvez-vous donner mget exampe avec la configuration java? TIA –