Я использую spring -gration-ftp для получения имен файлов с нескольких серверов ftp из разных каталогов.Я реализовал DelegatingSessionFactory для подключения к нескольким FTP-серверам и для получения имен файлов. Я реализовал FtpOutboundGateway с командой ls в приложении весенней загрузки.Но я получаю файлы только с одного FTP-сервера, мне нужны файлы со всех предоставленных FTP-серверов.Не могли бы вы помочь здесь, чтобы получить их.
Я пробовал ниже строку кода в bean-компоненте FtpOutboundGateway, поэтому я получал информацию о файле только с сервера ftp2.Я не могу найти решение для получения сведений о файлах с обоих серверов ftp1 и ftp2.
@ServiceActivator(inputChannel = "ftpLS")
@Bean
public FtpOutboundGateway getGW() {
final SessionFactory<FTPFile> sf1 =
this.sessionFactory.getFactoryLocator().getSessionFactory("two");
final FtpOutboundGateway gateway = new FtpOutboundGateway(sf1 , "ls",
"payload");
gateway.setOption(Option.NAME_ONLY);
return gateway;
}
Найти код здесь - Код здесь: -
package com.springernature.ecm.erroralert.scheduler;
import java.time.format.DateTimeFormatter;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.net.ftp.FTPFile;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.integration.annotation.MessagingGateway;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.integration.file.remote.gateway.AbstractRemoteFileOutboundGateway.Option;
import org.springframework.integration.file.remote.session.DelegatingSessionFactory;
import org.springframework.integration.file.remote.session.SessionFactory;
import org.springframework.integration.ftp.gateway.FtpOutboundGateway;
import org.springframework.integration.ftp.session.DefaultFtpSessionFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import com.springernature.ecm.erroralert.task.ErrorAlertTask;
import com.springernature.ecm.erroralert.utility.FileUtility;
import lombok.extern.slf4j.Slf4j;
/**
* @author abc
*/
@Component
@Slf4j
public class ScheduledTasks {
private static final DateTimeFormatter dateTimeFormatter =
DateTimeFormatter.ofPattern("HH:mm:ss");
@Autowired
private ErrorAlertTask errorAlertTask;
@Autowired
private FileUtility fileUtility;
private final String[] names = { "one", "two" };
private final String[] hosts = { "ftp1.company.com", "ftp2.company.com" };
private final String[] users = { "abc", "xyx" };
private final String[] pwds = { "******", "******" };
private final String[] port = { "21", "21" };
@Autowired
private DelegatingSessionFactory<FTPFile> sessionFactory;
@Autowired
private Gate gate;
@Scheduled(fixedRate = 60000)
public void scheduleTaskWithFixedRate() {
runner(this.gate);
}
public void runner(final Gate gate) {
try {
this.sessionFactory.setThreadKey("one"); // use factory "one"
final List list = gate.list("/abc/abcd/somepath/Out/");
log.info("Result:" + list);
this.sessionFactory.clearThreadKey();
this.sessionFactory.setThreadKey("two"); // use factory "two"
final List list2 = gate.list("/somepath/Out/");
log.info("Result2:" + list2);
} finally {
this.sessionFactory.clearThreadKey();
}
}
@Bean
public DelegatingSessionFactory<FTPFile> sessionFactory() {
final Map<Object, SessionFactory<FTPFile>> factories = new LinkedHashMap<>();
for (int i = 0; i < this.names.length; i++) {
final DefaultFtpSessionFactory factory = new DefaultFtpSessionFactory();
factory.setHost(this.hosts[i]);
factory.setUsername(this.users[i]);
factory.setPassword(this.pwds[i]);
factory.setPort(Integer.parseInt(this.port[i]));
factories.put(this.names[i], factory);
}
// use the first SF as the default
return new DelegatingSessionFactory<FTPFile>(
factories,
factories.values().iterator().next());
}
@ServiceActivator(inputChannel = "ftpLS")
@Bean
public FtpOutboundGateway getGW() {
final FtpOutboundGateway gateway = new FtpOutboundGateway(sessionFactory(), "ls", "payload");
gateway.setOption(Option.NAME_ONLY);
return gateway;
}
@MessagingGateway(defaultRequestChannel = "ftpLS")
public interface Gate {
List<String> list(String directory);
}
}
Фактический результат - 2019-09-24 17: 53: 55.674 ИНФО 13052 --- [scheduling-1] cseescheduler.ScheduledTasks: Результат: [test1.log, test2.txt] 2019-09-24 17: 53: 55.674 ИНФО 13052 --- [планирование-1] cseescheduler.ScheduledTasks: Result2: []
Ожидаемый результат - 2019-09-24 17: 53: 55.674 INFO 13052 --- [scheduling-1] cseescheduler.ScheduledTasks: Результат: [test1.log, test2.txt] 2019-09-24 17: 53: 55.674 INFO 13052 --- [scheduling-1] cseescheduler.ScheduledTasks: Результат 2: [Имена файлов с сервера ftp2]