我确实根据客户在我们的应用程序中配置了多个远程服务器。
当该特定客户的报告准备就绪时,我应该连接到该特定客户的远程服务器,并上传报告文件。
我面前有两个选择 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;
在该用例中哪个更合适?
答案 0 :(得分:0)
第二个选项由第一个选项使用。因此,如果您使用的是Spring框架,请使用第一个选项。如果您不使用弹簧,请使用第二个选项。
使用Spring,您可以在用例中使用一些工具。