如何动态连接不同的 SFTP 服务器?
how can i connect with different SFTP server dynamically?
我正在使用 spring 集成将文件从 SFTP 移动到本地目录。我能够将文件从一个 sftp 服务器移动到本地,我有 3 4 个 sftp 服务器,首先我考虑为每个 SFTP 服务器编写不同的 类,经过我的研究我发现我们可以使用 委派 sessionfactory 以使用 java 设置多个 SFTP。我阅读了文档,但无法实现。任何人都可以帮助我。我在下面添加我的代码。
@Configuration
@EnableIntegration
public class SftpFileMove {
@Value("${sftpConfig.host}")
private String host;
@Value("${sftpConfig.username}")
private String userName;
@Value("${sftpConfig.password}")
private String password;
@Value("${sftpConfig.port}")
private Integer port;
@Bean
public SessionFactory<LsEntry> sftpSessionFactory() {
final DefaultSftpSessionFactory factory = new DefaultSftpSessionFactory(true);
factory.setHost(host);
factory.setPort(port);
factory.setUser(userName);
factory.setPassword(password);
factory.setAllowUnknownKeys(true);
return new CachingSessionFactory<LsEntry>(factory);
}
@Bean
public SftpInboundFileSynchronizer sftpInboundFileSynchronizer() {
SftpInboundFileSynchronizer fileSynchronizer = new SftpInboundFileSynchronizer(sftpSessionFactory());
fileSynchronizer.setDeleteRemoteFiles(true);
fileSynchronizer.setRemoteDirectory("/upload/INV/");
fileSynchronizer.setFilter(new SftpSimplePatternFileListFilter("*.xml"));
return fileSynchronizer;
}
@Bean
@InboundChannelAdapter(channel = "sftpChannel", poller = @Poller(fixedDelay = "30000"))
public MessageSource<File> sftpMessageSource() {
SftpInboundFileSynchronizingMessageSource source = new SftpInboundFileSynchronizingMessageSource(
sftpInboundFileSynchronizer());
source.setLocalDirectory(new File("feeds/"));
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 {
BatchProcessorLogger.debug("F111F7B0-9235-11EA-AB12-0800200C9A66", "Moved succussfully to{}",
message.getPayload());
}
};
}
}
参见Inbound Channel Adapters: Polling Multiple Servers and Directories。
只需为每个服务器配置一个会话工厂,然后将它们添加到委托工厂,每个服务器都有一个密钥。
然后设置RotatingServerAdvice
循环servers/directories。
我正在使用 spring 集成将文件从 SFTP 移动到本地目录。我能够将文件从一个 sftp 服务器移动到本地,我有 3 4 个 sftp 服务器,首先我考虑为每个 SFTP 服务器编写不同的 类,经过我的研究我发现我们可以使用 委派 sessionfactory 以使用 java 设置多个 SFTP。我阅读了文档,但无法实现。任何人都可以帮助我。我在下面添加我的代码。
@Configuration
@EnableIntegration
public class SftpFileMove {
@Value("${sftpConfig.host}")
private String host;
@Value("${sftpConfig.username}")
private String userName;
@Value("${sftpConfig.password}")
private String password;
@Value("${sftpConfig.port}")
private Integer port;
@Bean
public SessionFactory<LsEntry> sftpSessionFactory() {
final DefaultSftpSessionFactory factory = new DefaultSftpSessionFactory(true);
factory.setHost(host);
factory.setPort(port);
factory.setUser(userName);
factory.setPassword(password);
factory.setAllowUnknownKeys(true);
return new CachingSessionFactory<LsEntry>(factory);
}
@Bean
public SftpInboundFileSynchronizer sftpInboundFileSynchronizer() {
SftpInboundFileSynchronizer fileSynchronizer = new SftpInboundFileSynchronizer(sftpSessionFactory());
fileSynchronizer.setDeleteRemoteFiles(true);
fileSynchronizer.setRemoteDirectory("/upload/INV/");
fileSynchronizer.setFilter(new SftpSimplePatternFileListFilter("*.xml"));
return fileSynchronizer;
}
@Bean
@InboundChannelAdapter(channel = "sftpChannel", poller = @Poller(fixedDelay = "30000"))
public MessageSource<File> sftpMessageSource() {
SftpInboundFileSynchronizingMessageSource source = new SftpInboundFileSynchronizingMessageSource(
sftpInboundFileSynchronizer());
source.setLocalDirectory(new File("feeds/"));
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 {
BatchProcessorLogger.debug("F111F7B0-9235-11EA-AB12-0800200C9A66", "Moved succussfully to{}",
message.getPayload());
}
};
}
}
参见Inbound Channel Adapters: Polling Multiple Servers and Directories。
只需为每个服务器配置一个会话工厂,然后将它们添加到委托工厂,每个服务器都有一个密钥。
然后设置RotatingServerAdvice
循环servers/directories。