У меня есть следующий код, который работает нормально, извлекает файлы с FTP-сервера в поток, но мне нужно получить строку каждого файла, кажется, мне нужно использовать Transformer, передающий кодировку, но что мне не хватает? Как точно передать содержимое строки каждого файла?Получить строку из Spring FTP потокового адаптера входящего канала
спасибо заранее
@SpringBootApplication
@EnableIntegration
public class FtpinboundApp extends SpringBootServletInitializer implements WebApplicationInitializer {
final static Logger logger = Logger.getLogger(FtpinboundApp.class);
public static void main(String[] args) {
SpringApplication.run(FtpinboundApp.class, args);
}
@Bean
public SessionFactory<FTPFile> ftpSessionFactory() {
DefaultFtpSessionFactory sf = new DefaultFtpSessionFactory();
sf.setHost("X.X.X.X");
sf.setPort(21);
sf.setUsername("xxx");
sf.setPassword("XXX");
return new CachingSessionFactory<FTPFile>(sf);
}
@Bean
@ServiceActivator(inputChannel = "stream")
public MessageHandler handler() {
return new MessageHandler() {
@Override
public void handleMessage(Message<?> message) throws MessagingException {
System.out.println("trasnferred file:" + message.getPayload());
}
};
}
@Bean
@InboundChannelAdapter(value = "stream", poller = @Poller(fixedRate = "1000"))
public MessageSource<InputStream> ftpMessageSource() {
FtpStreamingMessageSource messageSource = new FtpStreamingMessageSource(template(), null);
messageSource.setRemoteDirectory("/X/X/X");
messageSource.setFilter(new FtpPersistentAcceptOnceFileListFilter(new SimpleMetadataStore(), "streaming"));
return messageSource;
}
@Bean
@Transformer(inputChannel = "stream", outputChannel = "data")
public org.springframework.integration.transformer.Transformer transformer() {
return new StreamTransformer("UTF-8");
}
@Bean
public FtpRemoteFileTemplate template() {
return new FtpRemoteFileTemplate(ftpSessionFactory());
}
@Bean(name = PollerMetadata.DEFAULT_POLLER)
public PollerMetadata defaultPoller() {
PollerMetadata pollerMetadata = new PollerMetadata();
pollerMetadata.setTrigger(new PeriodicTrigger(5000));
return pollerMetadata;
}
}
Гэри, спасибо. да на самом деле у меня есть: – viruskimera
Гэри, спасибо да на самом деле у меня есть: \t @Bean \t @Transformer (inputChannel = "поток", outputChannel = "данные") \t общественного org.springframework.integration.transformer.Transformer трансформатор() { \t вернуть новый StreamTransformer («UTF-8»); \t}, но я не уверен, где его использовать в коде. – viruskimera
В настоящее время у вашего активатора обслуживания и трансформатора подписаны «поток» - это означает, что сообщения будут поочередно передаваться каждому из них - вам нужно подписаться на активатор услуги на выходной канал трансформатора. –