Я использую spring integration
sftp для загрузки и выгрузки файлов. В документе я обнаружил
Spring Integration поддерживает отправку и получение файлов через SFTP, предоставляя три конечные точки на стороне клиента: адаптер входящего канала, адаптер исходящего канала и шлюз исходящей почты.
Когда я хочу загрузить файлы, я должен назначить локальный каталог, а когда я хочу загрузить файлы, я должен назначить удаленный каталог. Но если я не могу назначить каталог при написании кода, например, мой каталог связан с датой. могу ли я назначить каталог во время выполнения?
Вот мой код:
@Bean
public SessionFactory<LsEntry> sftpSessionFactory(){
DefaultSftpSessionFactory defaultSftpSessionFactory = new DefaultSftpSessionFactory();
defaultSftpSessionFactory.setHost(host);
defaultSftpSessionFactory.setPort(Integer.parseInt(port));
defaultSftpSessionFactory.setUser(username);
defaultSftpSessionFactory.setPassword(password);
defaultSftpSessionFactory.setAllowUnknownKeys(true);
return new CachingSessionFactory<LsEntry>(defaultSftpSessionFactory);
}
@Bean
public SftpRemoteFileTemplate sftpRemoteFileTemplate(){
SftpRemoteFileTemplate sftpRemoteFileTemplate = new SftpRemoteFileTemplate(sftpSessionFactory());
return sftpRemoteFileTemplate;
}
@Bean
@ServiceActivator(inputChannel = "sftpChannel")
public MessageHandler handlerGet() {
SftpOutboundGateway sftpOutboundGateway = new SftpOutboundGateway(sftpSessionFactory(), "mget", "payload");
sftpOutboundGateway.setLocalDirectory(new File(localDirectory));
sftpOutboundGateway.setFilter(new SftpSimplePatternFileListFilter("*.txt"));
sftpOutboundGateway.setSendTimeout(1000);
return sftpOutboundGateway;
}
В messageHandler я должен назначить localDirectory в outboundGateway. И когда я хочу изменить свой localDirectory по дням, я должен загрузить файл в localDirectory и перейти в целевой каталог. Как я могу назначить localDirectory во время выполнения. Например, сегодня я загружаю на 20170606 /, а завтра я загружаю на 20170607?
редактировать
это мой вариант и тест
public interface OutboundGatewayOption {
@Gateway(requestChannel = "sftpChannel")
public List<File> getFiles(String dir);
}
@Test
public void test2(){
outboundGatewayOption.getFiles("upload/20160920/");
}