Spring 集成 ftp 入站通道适配器递归同步

Spring Integration ftp inbound channel adapter recursive synchronization

通过 Spring 集成,是否可以使用 ftp 入站通道适配器递归同步文件(包括子文件夹的文件)?

否;但是您可以使用出站网关使用递归 MGET 获取完整的远程目录树...

@SpringBootApplication
@IntegrationComponentScan
public class So42324318Application {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(So42324318Application.class, args);
        List<File> files = context.getBean(Gateway.class).fetchFiles("foo/*");
        System.out.println(files);
        context.close();
    }

    @MessagingGateway(defaultRequestChannel = "fetchRecursive")
    public interface Gateway {

        public List<File> fetchFiles(String remoteDir);

    }

    @Bean
    @ServiceActivator(inputChannel = "fetchRecursive")
    public FtpOutboundGateway gateway() {
        // Create a recursive MGET gateway that gets the remote directory from the payload
        FtpOutboundGateway gateway = new FtpOutboundGateway(sessionFactory(), "mget", "payload");
        gateway.setOptions("-R"); 
        gateway.setLocalDirectoryExpression(new SpelExpressionParser().parseExpression("#remoteDirectory"));
        return gateway;
    }

    @Bean
    public SessionFactory<FTPFile> sessionFactory() {
        return new CachingSessionFactory<>(ftpSF());
    }

    private SessionFactory<FTPFile> ftpSF() {
        DefaultFtpSessionFactory sf = new DefaultFtpSessionFactory();
        sf.setHost("10.0.0.3");
        sf.setUsername("ftptest");
        sf.setPassword("ftptest");
        sf.setClientMode(FTPClient.PASSIVE_LOCAL_DATA_CONNECTION_MODE);
        return sf;
    }

}

结果:

2017-02-19 09:55:09.351  INFO 61921 --- [           main] o.s.integration.ftp.session.FtpSession   : File has been successfully transferred from: foo/bar.tx
2017-02-19 09:55:09.353  INFO 61921 --- [           main] o.s.integration.ftp.session.FtpSession   : File has been successfully transferred from: foo/bar.txt
2017-02-19 09:55:09.356  INFO 61921 --- [           main] o.s.integration.ftp.session.FtpSession   : File has been successfully transferred from: foo/bar/abc.txt
2017-02-19 09:55:09.358  INFO 61921 --- [           main] o.s.integration.ftp.session.FtpSession   : File has been successfully transferred from: foo/baz.txt
2017-02-19 09:55:09.362  INFO 61921 --- [           main] o.s.integration.ftp.session.FtpSession   : File has been successfully transferred from: foo/foo/bar/qux.txt
2017-02-19 09:55:09.364  INFO 61921 --- [           main] o.s.integration.ftp.session.FtpSession   : File has been successfully transferred from: foo/foo/baz/fiz.txt
[foo/bar.tx, foo/bar.txt, foo/bar/abc.txt, foo/baz.txt, foo/foo/bar/qux.txt, foo/foo/baz/fiz.txt]