У нас есть файл download
с FTP, и есть странное поведение, с которым входящий адаптер ftp перестает работать после сброса сети, вот шаги для воспроизведения проблемы:Весна интеграции FTP InboundChannelAdapter умирает после сброса сети
- запуска приложение
- приложение начинает загружать файлы с FTP-сервера на локальный
- там filename.writing файл, появляющийся в определенном локальном каталоге
- вытащить сетевой кабель (для имитации сброса сети ситуация)
- приложение останавливается для загрузки файла (очевидно, нет сетевого подключения)
- подключить сетевой кабель.
- загрузка не перезапускается или не перезагружается, приложение остается неподвижным.
- не существует
LOG
вообще, чтобы идентифицировать эту проблему.
Заранее благодарен!
ОБНОВЛЕНИЕ
Эта проблема должна быть зафиксирована путем добавления тайм-аут defSession.setConnectTimeout(Integer.valueOf(env.getProperty("ftp.timeout.connect")));
И Приведенный ниже код является Рабочий пример на чтение FTP клиента.
Вот фрагмент кода:
@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: подключен на сервер [ip] ' – Jaiwo99