Мы используем последнюю версию Spring Boot для Spring и используем последнюю интеграцию Spring для SFTP. Я был на сайте документации Spring Integration SFTP, и я взял конфигурации Spring загрузочную как есть:Spring Integration SFTP Пример с Spring Boot
@Bean
public SessionFactory<LsEntry> sftpSessionFactory() {
DefaultSftpSessionFactory factory = new DefaultSftpSessionFactory(true);
factory.setHost("localhost");
factory.setPort(port);
factory.setUser("foo");
factory.setPassword("foo");
factory.setAllowUnknownKeys(true);
return new CachingSessionFactory<LsEntry>(factory);
}
@Bean
public SftpInboundFileSynchronizer sftpInboundFileSynchronizer() {
SftpInboundFileSynchronizer fileSynchronizer = new SftpInboundFileSynchronizer(sftpSessionFactory());
fileSynchronizer.setDeleteRemoteFiles(false);
fileSynchronizer.setRemoteDirectory("/");
fileSynchronizer.setFilter(new SftpSimplePatternFileListFilter("*.xml"));
return fileSynchronizer;
}
@Bean
@InboundChannelAdapter(channel = "sftpChannel")
public MessageSource<File> sftpMessageSource() {
SftpInboundFileSynchronizingMessageSource source =
new SftpInboundFileSynchronizingMessageSource(sftpInboundFileSynchronizer());
source.setLocalDirectory(new File("ftp-inbound"));
source.setAutoCreateLocalDirectory(true);
source.setLocalFilter(new AcceptOnceFileListFilter<File>());
return source;
}
@Bean
@ServiceActivator(inputChannel = "sftpChannel")
public MessageHandler handler() {
return new MessageHandler() {
@Override
public void handleMessage(Message<?> message) throws MessagingException {
System.out.println(message.getPayload());
}
};
}
Позвольте мне быть ясно, после вырезания и вставки, есть некоторые модульных тестов, которые работают. Однако при загрузке контекста приложения появилось сообщение об ошибке, потому что опроса не было.
Когда я искал эту ошибку, другие сообщения в StackOverflow сказали, что мне также пришлось добавить это сообщение об ошибке при загрузке контекста приложения.
@Bean(name = PollerMetadata.DEFAULT_POLLER)
public PollerMetadata defaultPoller() {
PollerMetadata pollerMetadata = new PollerMetadata();
pollerMetadata.setTrigger(new PeriodicTrigger(60));
return pollerMetadata;
}
Когда я добавил этот код, то, по крайней мере, моя сборка будет работать, и тесты будут работать, поскольку контекст приложения теперь загружаются правильно.
Теперь я ищу пример кода, как это сделать и перемещать файлы? Примеры SFTP Spring Integration на GitHub в порядке, но не очень ... далеко от него.
Пример интеграции с базовой весной показывает, как читать файлы с сервера SFTP, если данные настроены с помощью файла application-context.xml. Где пример использования конфигурации Spring Boot, а затем код для чтения с этого сервера и код для теста?
Я понимаю, что независимо от того, используете ли вы класс Java для конфигурации Spring Boot или файл application-context.xml ... рабочий код должен работать одинаково для автономных SFTP-каналов и некоторого входящего адаптера канала.
Так вот код, я пытаюсь сделать работу:
@Component
@Profile("sftpInputFetch")
public class SFTPInputFetcher implements InputFetcher
{
// The PollableChannel seems fine
@Autowired
PollableChannel sftpChannel;
@Autowired
SourcePollingChannelAdapter sftpChannelAdapter;
@Override
public Stream<String> fetchLatest() throws FileNotFoundException
{
Stream<String> stream = null;
sftpChannelAdapter.start();
Message<?> received = sftpChannel.receive();
File file = (File)received.getPayload();
// get Stream<String> from file
return stream;
}
В настоящее время "sftpChannelAdapter.start();" это то, с чем я столкнулся. Эта реализация не находит класс «SourcePollingChannelAdapter».
Если это было определено в классическом контексте XML-приложения с «id», тогда этот код автоматически обновляется. С конфигурацией Spring Boot это не похоже на то, что вы можете определить «id» для компонента.
Это просто связано с недостатком знаний о том, как конвертировать из традиционного XML-файла приложения-контекста с аннотациями в код, к использованию полного файла конфигурации контекста приложения Spring Boot.
Любая помощь с этим очень ценится. Благодаря!
Я просто проверял без проблем; см. выше. –
Я только что отредактировал вопрос, чтобы было более ясно, что «не работает». В «@InboundChannelAdapter» у вас есть СЕЙЧАС, к которому добавлен опроллер, чего не было в документации sftp. Вы также заставляли его работать? Это было с sftp/test на github? Этот тест показывает XML-файл контекста приложения ... Таким образом, контекст classpathxmlapplication не будет работать. – tjholmes66
В тесте, когда я загружаю контекст приложения из SpringBoot, тогда я должен иметь возможность автоподключить канал и адаптер входящего канала. Я сделал это раньше, но просто не сделал этого с классом конфигурации Spring Boot Java. – tjholmes66