使用不同的 sftp 会话工厂



目前我将所有生成的文件上传到单个SFTP,并且一切正常。但是要求发生了变化,我需要在不同的SFTP服务器上上传文件。 例: 在 REST 端点上,我收到了请求type=FULL,然后我需要将文件上传到 SFTP1,如果type=PART,那么我需要上传到SFTP2

我的 sftp 配置:

@Bean
public SessionFactory<ChannelSftp.LsEntry> sftpSessionFactory() {
final DefaultSftpSessionFactory factory = new DefaultSftpSessionFactory(true);
factory.setHost(properties.getHost());
factory.setPort(properties.getPort());
factory.setUser(properties.getUser());
factory.setPassword(properties.getPassword());
factory.setAllowUnknownKeys(true);
return factory;
}
@Bean
@ServiceActivator(inputChannel = "toSftpChannel")
public MessageHandler handler(@Value("'${sftp.folder}'.concat(headers['type'])")
final String remoteDirectory) {
final SftpMessageHandler handler = new SftpMessageHandler(sftpSessionFactory());
handler.setRemoteDirectoryExpressionString(remoteDirectory);
handler.setAutoCreateDirectory(true);
return handler;
}
@MessagingGateway
public interface SftpService {
@Gateway(requestChannel = "toSftpChannel")
void uploadFileToSftp(@Payload File file,
@Header("filename") String filename,
@Header("type") String type);
}

是否可以创建 2 个会话工厂并在某些条件下使用它们?

另外,如果我对第一和第二SFTP服务器上的目录有不同的逻辑,我是否需要两个SftpMessageHandlersMessagingGateways

现在我认为作为解决方案,创建两个SftpService接口,两个配置包,并在应用程序逻辑中更改上传位置。

通过创建第二个来解决

@Bean
public SessionFactory<ChannelSftp.LsEntry> sftpSessionFactory() {
final DefaultSftpSessionFactory factory = new DefaultSftpSessionFactory(true);
factory.setHost(properties.getHost());
factory.setPort(properties.getPort());
factory.setUser(properties.getUser());
factory.setPassword(properties.getPassword());
factory.setAllowUnknownKeys(true);
return factory;
}

对于第二个 sftp 连接,并实现了第二个

@Bean
@ServiceActivator(inputChannel = "toSftpChannel")
public MessageHandler handler(@Value("'${sftp.folder}'.concat(headers['type'])")
final String remoteDirectory) {
final SftpMessageHandler handler = new SftpMessageHandler(sftpSessionFactory());
handler.setRemoteDirectoryExpressionString(remoteDirectory);
handler.setAutoCreateDirectory(true);
return handler;
}
@MessagingGateway
public interface SftpService {
@Gateway(requestChannel = "toSftpChannel")
void uploadFileToSftp(@Payload File file,
@Header("filename") String filename,
@Header("type") String type);
}

具有不同的inputChannel名称

最新更新