java - SFTP 默认会话工厂或 SFTP 普通连接,用于将文件上传到多个远程服务器
问题描述
我确实根据客户在我们的应用程序中配置了多个远程服务器。
当为该特定客户准备好报告时,我应该连接到该特定客户的远程服务器并上传报告文件。
我面前有两个选项 a) 使用 Spring 的默认会话工厂(为每个文件上传获取会话工厂)
public SessionFactory<LsEntry> sftpSessionFactory() {
DefaultSftpSessionFactory factory = new DefaultSftpSessionFactory(true);
factory.setHost(sftpHost);
factory.setPort(sftpPort);
factory.setUser(sftpUser);
if (sftpPrivateKey != null) {
factory.setPrivateKey(sftpPrivateKey);
factory.setPrivateKeyPassphrase(sftpPrivateKeyPassphrase);
} else {
factory.setPassword(sftpPasword);
}
factory.setAllowUnknownKeys(true);
return factory;
}
@Bean
@ServiceActivator(inputChannel = "toSftpChannel")
public MessageHandler handler() {
SftpMessageHandler handler = new SftpMessageHandler(sftpSessionFactory());
handler.setRemoteDirectoryExpression(new LiteralExpression(sftpRemoteDirectory));
handler.setFileNameGenerator(new FileNameGenerator() {
@Override
public String generateFileName(Message<?> message) {
if (message.getPayload() instanceof File) {
return ((File) message.getPayload()).getName();
} else {
throw new IllegalArgumentException("File expected as payload.");
}
}
});
return handler;
}
b) 使用普通的 sftp 连接
try {
JSch jsch = new JSch();
Session session = jsch.getSession("sftpuser", "sftphost");
session.setPassword("sftppassword");
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
config.put("PreferredAuthentications",
"publickey,keyboard-interactive,password");
session.setConfig(config);
session.connect();
Channel channel = session.openChannel("sftp");
channel.connect();
System.out.println("sftp channel opened and connected.");
ChannelSftp channelSftp = (ChannelSftp) channel;
哪一个更适合这个用例?
解决方案
第二个选项由第一个选项使用。因此,在您的情况下,如果您使用的是 spring 框架,请使用第一个选项。如果您不使用弹簧,请使用第二个选项。
使用 Spring,您可以在用例中使用一些工具。
推荐阅读
- python - 使用 lxml 的 Python 脚本,xpath 返回空列表
- html - 同时为不同的 div 标签使用两个包含相同样式属性的 css 文件
- sql - 如何创建存储过程以在 Sql server 中创建表,其中表的名称将按年份更改,例如 Order2019
- c++ - Eigen::MatrixXf 到 std::vector
- javascript - 我的引导导航栏没有显示在移动设备上
- python-3.x - 数据库验证在 for 循环中不起作用
- c++ - 完全不使用字符串将整数转换为数组(包括前导零)
- python - 使用 sounddevice numpy 数组执行 fft
- vue.js - 在核心 ui vue.js 的导航栏中有条件地呈现项目的问题
- react-native-ios - 为 ios 反应原生通用链接