Envoyer et recevoir des fichiers par FTP au Printemps de Démarrage

Je suis nouveau sur le Framework Spring et, en effet, je suis à la formation et à l'aide Printemps de Démarrage. Récemment, dans l'application que je suis en développement, j'ai fait de Quartz Planificateur de travail, et maintenant je veux faire le Printemps de l'Intégration de travail: connexion FTP à un serveur d'écrire et de lire des fichiers à partir d'.

Ce que je veux, c'est vraiment simple (comme je l'ai été en mesure de le faire dans un précédent application java). J'en ai deux de Quartz des Travaux planifiés licenciés dans les différentes fois par jour: l'un d'eux lit un fichier à partir d'un serveur FTP et un autre écrit un fichier sur un serveur FTP.

Je vais vous décrire en détail ce que j'ai développé jusqu'à présent.

@SpringBootApplication
@ImportResource("classpath:ws-config.xml")
@EnableIntegration
@EnableScheduling
public class MyApp extends SpringBootServletInitializer {

    @Autowired
    private Configuration configuration;

    //...

    @Bean
    public DefaultFtpsSessionFactory  myFtpsSessionFactory(){
        DefaultFtpsSessionFactory sess = new DefaultFtpsSessionFactory();
        Ftp ftp = configuration.getFtp();
        sess.setHost(ftp.getServer());
        sess.setPort(ftp.getPort());
        sess.setUsername(ftp.getUsername());
        sess.setPassword(ftp.getPassword());
        return sess;
    }

}

La classe suivante je l'ai nommé comme un FtpGateway, comme suit:

@Component
public class FtpGateway {

    @Autowired
    private DefaultFtpsSessionFactory sess;

    public void sendFile(){
        //todo
    }

    public void readFile(){
        //todo
    }

}

Je suis en train de lire cette documentation pour apprendre à le faire. Spring Integration FTP semble être basé sur l'événement, donc je ne sais pas comment puis-je exécuter, soit de les sendFile() et readFile() de par l'Emploi lorsque le déclencheur est activé à un moment précis.

La documentation me dit quelque chose sur l'utilisation des Entrants de l'Adaptateur de Canal (pour lire des fichiers sur un FTP?), Sortant de l'Adaptateur de Canal (pour écrire des fichiers sur un FTP?) et Sortant de la Passerelle (pour faire quoi?):

Printemps Intégration prend en charge l'envoi et la réception de fichiers via FTP/FTPS, en fournissant trois côté client, les systèmes d'extrémité: en entrée de l'Adaptateur de Canal, Sortant de l'Adaptateur de Canal, et Sortant de la Passerelle. Il fournit également la pratique de l'espace de noms en fonction des options de configuration pour la définition de ces composants client.

Donc, je n'ai pas de comprendre comment le suivre.

S'il vous plaît, quelqu'un pourrait-il me donner un indice?

Merci!

MODIFIER:

Merci @M. Deinum. Tout d'abord, je vais essayer une tâche simple: lire un fichier sur le FTP, le poller va exécuter toutes les 5 secondes. C'est ce que j'ai ajouté:

@Bean
public FtpInboundFileSynchronizer ftpInboundFileSynchronizer() {
    FtpInboundFileSynchronizer fileSynchronizer = new FtpInboundFileSynchronizer(myFtpsSessionFactory());
    fileSynchronizer.setDeleteRemoteFiles(false);
    fileSynchronizer.setPreserveTimestamp(true);
    fileSynchronizer.setRemoteDirectory("/Entrada");
    fileSynchronizer.setFilter(new FtpSimplePatternFileListFilter("*.csv"));
    return fileSynchronizer;
}


@Bean
@InboundChannelAdapter(channel = "ftpChannel", poller = @Poller(fixedDelay = "5000"))
public MessageSource<File> ftpMessageSource() {
    FtpInboundFileSynchronizingMessageSource source = new FtpInboundFileSynchronizingMessageSource(inbound);
    source.setLocalDirectory(new File(configuracion.getDirFicherosDescargados()));
    source.setAutoCreateLocalDirectory(true);
    source.setLocalFilter(new AcceptOnceFileListFilter<File>());
    return source;
}

@Bean
@ServiceActivator(inputChannel = "ftpChannel")
public MessageHandler handler() {
    return new MessageHandler() {

        @Override
        public void handleMessage(Message<?> message) throws MessagingException {
            Object payload = message.getPayload();
            if(payload instanceof File){
                File f = (File) payload;
                System.out.println(f.getName());
            }else{
                System.out.println(message.getPayload());
            }
        }

    };
}

Puis, lorsque l'application est en cours d'exécution, j'ai mis un nouveau fichier csv intro "Entrada" dossier distant, mais le gestionnaire() la méthode n'est pas courir après les 5 secondes... je suis en train de faire quelque chose de mal?

Configurer et dans et sortant, joindre un poller et le printemps de l'intégration devrait faire tout ce que vous faites maintenant manuellement.
Je ne suis pas capable de le faire fonctionner. S'il vous plaît, pourriez-vous fournir tout site qui explique comment faire, @M. Deinum?
Activer la journalisation du DÉBOGAGE pour regarder le sondage événements.
Je ne vois pas ce que vous utilisez ftpInboundFileSynchronizer() de la ftpMessageSource(). Il y a quelques suspects inbound, mais nous n'avons aucune idée de ce que c'est que d'environ...
je suis bloqué au même point.. Fait-il travailler pour vous?

OriginalL'auteur russellhoff | 2017-02-08