Spring Integration SFTP Exemple avec Spring Boot
Nous utilisons les dernières Printemps de Démarrage pour un Printemps de l'application et en utilisant les dernières Spring Integration pour SFTP. J'ai été à la source de l'Intégration SFTP site de documentation, et j'ai profité du Printemps de Configuration de Démarrage est:
@Bean
public SessionFactory<LsEntry> sftpSessionFactory() {
DefaultSftpSessionFactory factory = new DefaultSftpSessionFactory(true);
factory.setHost("localhost");
factory.setPort(port);
factory.setUser("foo");
factory.setPassword("foo");
factory.setAllowUnknownKeys(true);
return new CachingSessionFactory<LsEntry>(factory);
}
@Bean
public SftpInboundFileSynchronizer sftpInboundFileSynchronizer() {
SftpInboundFileSynchronizer fileSynchronizer = new SftpInboundFileSynchronizer(sftpSessionFactory());
fileSynchronizer.setDeleteRemoteFiles(false);
fileSynchronizer.setRemoteDirectory("/");
fileSynchronizer.setFilter(new SftpSimplePatternFileListFilter("*.xml"));
return fileSynchronizer;
}
@Bean
@InboundChannelAdapter(channel = "sftpChannel")
public MessageSource<File> sftpMessageSource() {
SftpInboundFileSynchronizingMessageSource source =
new SftpInboundFileSynchronizingMessageSource(sftpInboundFileSynchronizer());
source.setLocalDirectory(new File("ftp-inbound"));
source.setAutoCreateLocalDirectory(true);
source.setLocalFilter(new AcceptOnceFileListFilter<File>());
return source;
}
@Bean
@ServiceActivator(inputChannel = "sftpChannel")
public MessageHandler handler() {
return new MessageHandler() {
@Override
public void handleMessage(Message<?> message) throws MessagingException {
System.out.println(message.getPayload());
}
};
}
Permettez-moi d'être clair, après découpage et de collage, il y a quelques tests d'unité exécuter. Cependant, lors du chargement du contexte de l'application, il y a un message d'erreur parce que le Scrutin n'était pas là.
Quand j'ai googlé cette erreur, les autres postes sur StackOverflow dit, j'ai aussi eu à ajouter pour supprimer ce message d'erreur lors du chargement du contexte de l'application.
@Bean(name = PollerMetadata.DEFAULT_POLLER)
public PollerMetadata defaultPoller() {
PollerMetadata pollerMetadata = new PollerMetadata();
pollerMetadata.setTrigger(new PeriodicTrigger(60));
return pollerMetadata;
}
Quand j'ai ajouté ce code, PUIS au moins mon build et les épreuves s'exécuter parce que le contexte de l'application a été maintenant être chargés correctement.
Maintenant, je suis à la recherche d'un exemple de code sur la façon de faire ce travail et de déplacer des fichiers? Le Printemps de l'Intégration SFTP exemples sur GitHub sont ok, mais pas beaucoup ... loin de là.
La Base Spring Integration Exemple montre comment lire des fichiers depuis un Serveur SFTP, si les données est configuré avec une application-context.xml fichier. Où en est l'exemple où un Ressort de configuration de Démarrage est utilisé, puis le code pour lire à partir de ce serveur, et le code pour le test?
Je comprends que, indépendamment de savoir si vous utilisez une classe Java pour le Printemps de configuration de Démarrage ou un application-context.xml fichier ... le code de travail devrait fonctionner de la même pour autocâblés SFTP canaux et certains entrants de l'adaptateur de canal.
Voici donc le code, je suis en train de faire le travail:
@Component
@Profile("sftpInputFetch")
public class SFTPInputFetcher implements InputFetcher
{
//The PollableChannel seems fine
@Autowired
PollableChannel sftpChannel;
@Autowired
SourcePollingChannelAdapter sftpChannelAdapter;
@Override
public Stream<String> fetchLatest() throws FileNotFoundException
{
Stream<String> stream = null;
sftpChannelAdapter.start();
Message<?> received = sftpChannel.receive();
File file = (File)received.getPayload();
//get Stream<String> from file
return stream;
}
Actuellement, "sftpChannelAdapter.start();" est la partie que je vais avoir des ennuis avec.
Cette mise en œuvre ne trouve pas le "SourcePollingChannelAdapter" de la classe.
Si cela a été défini dans le XML classiques contexte de l'application avec un "id" puis ce code autowires l'amende juste. Avec un Printemps de configuration de Démarrage, il ne semble pas que vous pouvez définir un "id" pour un haricot.
- Ce juste les tiges de mon manque de connaissances sur la façon de convertir à l'aide d'une application traditionnelle-contexte fichier XML AVEC des annotations dans le code, à l'aide d'un complet de Printemps de l'application de Démarrage contexte fichier de configuration.
Tout, est très apprécié. Merci!
OriginalL'auteur tjholmes66 | 2016-12-14
Vous devez vous connecter pour publier un commentaire.
Je ne comprends pas la question; vous avez dit
et puis
Ce n'est pas de travail?
Vous pouvez également utiliser
au lieu d'ajouter une valeur par défaut poller définition.
Nous fixer les docs pour le manque poller config.
MODIFIER
J'ai juste copié le code dans un nouveau démarrage de l'application (avec le poller config) et il fonctionne comme prévu.
Résultat:
J'ai juste modifié la question pour le rendre plus clair ce qui a été "pas de travail." "@InboundChannelAdapter" vous avez MAINTENANT a le poller, ajouté à cela, ce qui n'était pas dans le sftp documentation. Vous aussi fait-il? Est que avec le sftp/test sur github? Ce test montre un contexte d'application fichier xml ... de Sorte que le classpathxmlapplication contexte ne fonctionnerait pas.
Dans le test, une fois que je charge le contexte de l'application de SpringBoot, alors je devrais être en mesure de autowire le canal et la inboundchannel adaptateur. J'ai fait cela avant, mais n'ont tout simplement pas le faire avec un Ressort de Démarrage de Configuration Java de la classe.
J'ai juste copié les docs pour un nouveau démarrage de l'app et ajouté le poller. Les docs sont fixes déjà voir le TABLEAU de je lien. Cette réponse montre comment déplacer le fichier avec une les conseils. Il utilise le Java DSL. Avec Java config ajouter les conseils au service de l'activateur de la chaîne de conseils.
Grand. Bien sûr, c'est une autre façon de le faire fonctionner ... mais je ne veux pas l'utiliser de cette façon. Je vais continuer à le regarder ... je vais dire à nouveau que le Printemps de l'Intégration des exemples les besoins de façon plus d'exemples avec les deux à l'aide d'une application de XML fichier de contexte que vous avez maintenant, ET avec le Printemps de Démarrage et Java DSL fichiers de configuration. Si il y a des exemples avec permettra à l'autowiring, qui pourrait être utile aussi.
OriginalL'auteur Gary Russell