0

Spring FTP Integration and Annotation 構成を使用して、FTP サーバーからファイルをダウンロードしました。ダウンロード後も、アプリケーションはサーバーに接続し、新しく追加されたファイルを見つけるようにトリガーされます。ファイルが追加された場合は、サーバーからダウンロードされます。しかし、最初の接続または最初のダウンロードの後に​​、FTP サーバー セッションを維持してサーバーを切断する必要はありません。

コード :

public class FtpServices {

    @Bean(name="ftpSessionFactory")
    public DefaultFtpSessionFactory ftpSessionFactory() {
        System.out.println("session");

        DefaultFtpSessionFactory sf = new DefaultFtpSessionFactory();
        sf.setHost("localhost");
        sf.setPort(21);
        sf.setUsername("user");
        sf.setPassword("password");

        return sf;
    }

    @Bean
    public FtpInboundFileSynchronizer ftpInboundFileSynchronizer() {
        System.out.println("2");
        FtpInboundFileSynchronizer fileSynchronizer = new FtpInboundFileSynchronizer(ftpSessionFactory());
        fileSynchronizer.setDeleteRemoteFiles(false);
        fileSynchronizer.afterPropertiesSet();
        fileSynchronizer.setRemoteDirectory("/test/");
       // fileSynchronizer.setFilter(new FtpSimplePatternFileListFilter("*.docx"));
        fileSynchronizer.setFilter(filter);
        return fileSynchronizer;
    }

    @Bean()
    @InboundChannelAdapter(value="ftpChannel", poller = @Poller(fixedDelay = "50", maxMessagesPerPoll = "1"))
    public FtpInboundFileSynchronizingMessageSource ftpMessageSource() {
        System.out.println(3);
        FtpInboundFileSynchronizingMessageSource source =
                new FtpInboundFileSynchronizingMessageSource(ftpInboundFileSynchronizer());
        source.setLocalDirectory(new File("D:/Test-downloaded/"));
        //source.stop();
        return source;
    }

    @Bean
    @ServiceActivator(inputChannel = "ftpChannel", requiresReply="false")
    public MessageHandler handler() {
        System.out.println(4);
        MessageHandler handler =  new MessageHandler() {

            @Override
            public void handleMessage(Message<?> message) throws MessagingException {
                System.out.println(message.getPayload()+" @ServiceActivator");
                System.out.println(" Message Header :"+message.getHeaders());
            }
        };
        return handler;
    }

    @Bean(name = PollerMetadata.DEFAULT_POLLER)
    public PollerMetadata defaultPoller() {

        PollerMetadata pollerMetadata = new PollerMetadata();
        pollerMetadata.setTrigger(triggerOnlyOnce());
        return pollerMetadata;
    }

}

また、AbtractFTPSessionFactory.java をオーバーライドして、FTP サーバーの接続と切断プロセスをテストします。

protected void postProcessClientAfterConnect(T t) throws IOException {
    System.out.println("After connect");
}

protected void postProcessClientBeforeConnect(T client) throws IOException {
    System.out.println("Before connect");
}

コンソール :

    INFO : org.springframework.context.support.DefaultLifecycleProcessor - Starting beans in phase -2147483648
    INFO : org.springframework.context.support.DefaultLifecycleProcessor - Starting beans in phase 0
    Before connect
    After connect
    D:\Test-downloaded\demo 1.txt @ServiceActivator
     Message Header :{id=e4a1fd7f-0bbf-9692-f70f-b0ac68b4dec4, timestamp=1477317086272}
    D:\Test-downloaded\demo.txt @ServiceActivator
     Message Header :{id=9115ee92-12b4-bf1f-d592-9c13bf7a27fa, timestamp=1477317086324}
    Before connect
    After connect
    Before connect
    After connect
    Before connect
    After connect
    Before connect
    After connect
    Before connect
    After connect
    Before connect
    After connect

ありがとう。

4

1 に答える 1