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