FTPからdownload
ファイルへのユースケースがあり、ネットワーク再設定後にftpインバウンドアダプタが動作しなくなるという奇妙な動作があります。春の統合FTP InboundChannelAdapterがネットワークリセット後に終了する
- 開始アプリケーション
- アプリケーションは、FTPサーバからファイルをダウンロードするために開始し
- 定義されたローカルディレクトリに表示されてfilename.writingファイルがあるネットワークのリセットをシミュレートするために、(ネットワークケーブルを抜きます状況)
- アプリケーションはファイルをダウンロードすることをやめます(ネットワーク接続はありません)。
- ネットワークケーブルを接続します。
- ダウンロードが再開またはリセットされないため、アプリケーションは依然として..続きます。
- この問題を特定するためには、まったく
LOG
はありません。
ありがとうございます!
UPDATE
この問題は以下のコードは、FTP読み取りクライアント上WORKING例でタイムアウトdefSession.setConnectTimeout(Integer.valueOf(env.getProperty("ftp.timeout.connect")));
とを追加することで固定してください。ここで
は、コードスニペットです:
@Bean
public DefaultFtpSessionFactory ftpSessionFactory() {
DefaultFtpSessionFactory defSession = new DefaultFtpSessionFactory();
defSession.setUsername(env.getProperty("ftp.username"));
defSession.setPassword(env.getProperty("ftp.password"));
defSession.setPort(21);
defSession.setHost(env.getProperty("ftp.host"));
defSession.setClientMode(FTPClient.PASSIVE_LOCAL_DATA_CONNECTION_MODE);
defSession.setControlEncoding("UTF-8");
return defSession;
}
@Bean
PollableChannel ftpChannel() {
return new QueueChannel(Integer.valueOf(env.getProperty("ftp.channel.size")));
}
@Bean
public FtpInboundFileSynchronizer ftpInboundFileSynchronizer() {
FtpInboundFileSynchronizer ftpInboundFileSynchronizer = new FtpInboundFileSynchronizer(ftpSessionFactory());
ftpInboundFileSynchronizer.setDeleteRemoteFiles(Boolean.valueOf(env.getProperty("ftp.directory.delete")));
FtpRegexPatternFileListFilter ftpRegexPatternFileListFilter = new FtpRegexPatternFileListFilter(pattern);
ftpInboundFileSynchronizer.setFilter(ftpRegexPatternFileListFilter);
ftpInboundFileSynchronizer.setRemoteDirectory(env.getProperty("ftp.directory.remote"));
return ftpInboundFileSynchronizer;
}
@Bean
@InboundChannelAdapter(value = "ftpChannel")
public FtpInboundFileSynchronizingMessageSource ftpInboundFileSynchronizingMessageSource() {
FtpInboundFileSynchronizingMessageSource ftpInboundFileSynchronizingMessageSource = new FtpInboundFileSynchronizingMessageSource(ftpInboundFileSynchronizer());
ftpInboundFileSynchronizingMessageSource.setLoggingEnabled(true);
ftpInboundFileSynchronizingMessageSource.setCountsEnabled(true);
ftpInboundFileSynchronizingMessageSource.setAutoCreateLocalDirectory(true);
ftpInboundFileSynchronizingMessageSource.setLocalDirectory(new File(env.getProperty("ftp.directory.local")));
return ftpInboundFileSynchronizingMessageSource;
}
@Bean(name = PollerMetadata.DEFAULT_POLLER)
public PollerMetadata defaultPoller() {
PollerMetadata pollerMetadata = new PollerMetadata();
pollerMetadata.setErrorHandler(t -> log.error("Failed to retrieve data from FTP: {}", t.getMessage(), t));
pollerMetadata.setTrigger(new PeriodicTrigger(60, TimeUnit.SECONDS));
return pollerMetadata;
}
ありがとうございます!私たちのケースでは、ケーブルが下流から引き出されました。私はそれを試して、これが理由であるかどうかを知らせます。別の質問があります。なぜなら、 'spring-integration-ftp'モジュールにはほとんどログがありません。それ? – Jaiwo99
私はあなたが何を意味するのかよくわかりません - もしスレッドが読み込み中に "つまらない"場合、何もログに記録できません。 DEBUGロギングを使用すると、正常に実行されているときにさらに多くのログを取得できます。 –
私は 'logging.level.org.springframework.integration:TRACE'を設定しました。唯一のログは' 2016-05-25 16:32:11.677 DEBUG 24075 --- [ask-scheduler-5] osifsDefaultFtpSessionFactory:Connectedですサーバー[IP]に ' – Jaiwo99