Collegues, я пытаюсь загрузить папки с файлами из sftp, используя весеннюю интеграцию.Как синхронизировать файлы из более чем одной папки между Ftp и локальной папкой с помощью Spring Integration?
можно синхронизировать файлы из одного папок 20161207
:
@Bean
public SftpInboundFileSynchronizer sftpInboundFileSynchronizer() {
SftpInboundFileSynchronizer fileSynchronizer =
new SftpInboundFileSynchronizer(sftpSessionFactory());
fileSynchronizer.setDeleteRemoteFiles(false);
fileSynchronizer.setRemoteDirectory("/pub/op/20161207/");
fileSynchronizer.setFilter(new SftpSimplePatternFileListFilter("*.xml"));
return fileSynchronizer;
}
Но что я должен делать, если нужно загрузить (синхронизированные) файлы из более чем одной папки (20161208
, 20161209
и т.д.)? У вас есть пример? Спасибо.
UPDATE Я пытался использовать SftpRegexPatternFileListFilter, но это не помогло:
@Bean
public SftpInboundFileSynchronizer sftpInboundFileSynchronizer() {
SftpInboundFileSynchronizer fileSynchronizer = new SftpInboundFileSynchronizer(sftpSessionFactory());
fileSynchronizer.setDeleteRemoteFiles(false);
fileSynchronizer.setRemoteDirectory("/pub/op/");
Pattern pattern = Pattern.compile(".*\\.xml$");
SftpRegexPatternFileListFilter sftpRegexPatternFileListFilter = new SftpRegexPatternFileListFilter(pattern);
fileSynchronizer.setFilter(sftpRegexPatternFileListFilter);
//fileSynchronizer.setFilter(new SftpSimplePatternFileListFilter("*.xml"));
return fileSynchronizer;
}
UPDATE Кодекс replac4ed здесь по совету:
@Bean @ServiceActivator(inputChannel = "sftpChannel")
public MessageHandler handler()
{ SftpOutboundGateway sftpOutboundGateway = new SftpOutboundGateway(sftpSessionFactory(), "MGET", "payload");
sftpOutboundGateway.setLocalDirectory(new File("sftp-inbound"));
return sftpOutboundGateway;}
UPDATE Артем, Гэри, спасибо вам за помощь. Это мой код: @Bean общественного DefaultSftpSessionFactory sftpSessionFactory() {
DefaultSftpSessionFactory factory = new DefaultSftpSessionFactory();
factory.setHost(server);
factory.setPort(port);
factory.setAllowUnknownKeys(true);
factory.setUser(login);
factory.setPassword(pass);
factory.setTimeout(60*1000);
return factory;
}
@Bean
@ServiceActivator(inputChannel = "sftpChannel")
public MessageHandler handler() {
SftpOutboundGateway sftpOutboundGateway = new SftpOutboundGateway(sftpSessionFactory(), "mget", "getPayload() == '/pub/op/20170130/test.xml'");
sftpOutboundGateway.setLocalDirectory(new File("C:/test/gateway/"));
return sftpOutboundGateway;
}
Когда я запустить приложение я получаю следующий вывод
12:25:58.593 INFO [main] o.s.c.s.DefaultLifecycleProcessor : Starting beans in phase -2147483648
12:25:58.593 INFO [main] o.s.i.endpoint.EventDrivenConsumer : Adding {sftp:outbound-gateway:aameFtpConfig.handler.serviceActivator} as a subscriber to the 'sftpChannel' channel
12:25:58.593 INFO [main] o.s.i.channel.DirectChannel : Channel 'org.spring[email protected]4157f54e.sftpChannel' has 1 subscriber(s).
12:25:58.593 INFO [main] o.s.i.endpoint.EventDrivenConsumer : started aameFtpConfig.handler.serviceActivator
12:25:58.594 INFO [main] o.s.c.s.DefaultLifecycleProcessor : Starting beans in phase 0
12:25:58.594 INFO [main] o.s.i.endpoint.EventDrivenConsumer : Adding {logging-channel-adapter:_org.springframework.integration.errorLogger} as a subscriber to the 'errorChannel' channel
12:25:58.594 INFO [main] o.s.i.c.PublishSubscribeChannel : Channel 'org.spring[email protected]4157f54e.errorChannel' has 1 subscriber(s).
12:25:58.594 INFO [main] o.s.i.endpoint.EventDrivenConsumer : started _org.springframework.integration.errorLogger
Но файл не копируется в "C:/test/gateway/"
. Plase, tel me, что я сделал не так?
Начиная с версии 4.2 вы можете использовать 'synchronizer.setRemoteDirectoryExpression' для использования выражения SpEL для генерации каталога, который будет проверяться на каждом опросе, - вы можете повернуть через несколько каталогов таким образом - но нет возможности сканировать несколько каталогов по одному опросу; и все они будут перенесены в один и тот же локальный каталог. Как говорит @Artem, вы можете использовать MGET (с рекурсией) для извлечения из нескольких каталогов. –
I'am новой весна ... мне нужно добавить фасоль, как сделать: '@Bean @ServiceActivator (inputChannel = "sftpChannel") общественного обработчик MessageHandler() { SftpOutboundGateway sftpOutboundGateway = новый SftpOutboundGateway (sftpSessionFactory()," MGET "," полезная нагрузка "); sftpOutboundGateway.setLocalDirectory (новый файл («sftp-inbound»)); return sftpOutboundGateway; } 'в моей конфигурации? – May12
Да, в противном случае это не способ заставить 'SftpOutboundGateway' работать –