#java #string #talend #datacontext #flow
#java #строка #talend #datacontext
Вопрос:
Я пытаюсь подключиться к нескольким ftp-сайтам, дело в том, что только имя хоста ftp (ip-адрес) варьируется между разными ftp-сайтами, а имя пользователя, пароль, порт, каталог — все те же, где я хотел бы загружать и читать / извлекать последние файлы.
У меня есть существующий поток, в котором он подключается к одному конкретному ftp-сайту и выполняет операцию, теперь я хочу добавить несколько ftp-сайтов, используя переменную контекста, и вызвать несколько потоков для разных ftp-сайтов как часть одного и того же потока, учитывая, что будет меняться только ИМЯ ХОСТА, все остальное точно такое же.
Должен ли я использовать компонент trunjob или какой самый простой способ справиться с этим?
Ответ №1:
Вы думали об использовании SFTP? Вот фрагмент, использующий библиотеку JSch, вы можете изменить его для нескольких подключений:
private static final String SFTP_SERVER_URL = "server.com";
private static final String SFTP_SERVER_USERNAME = "user";
private static final String SFTP_SERVER_PASSWORD = "pass";
private static final int SFTP_SERVER_PORT = port;
private final static String LOCAL_DOWNLOAD_PATH = "downloads/";
private static ChannelSftp setupSFTP() {
ChannelSftp channel = null;
try {
JSch jsch = new JSch();
JSch.setConfig("StrictHostKeyChecking", "no");
Session jschSession = jsch.getSession(SFTP_SERVER_USERNAME, SFTP_SERVER_URL);
jschSession.setPassword(SFTP_SERVER_PASSWORD);
jschSession.setPort(SFTP_SERVER_PORT);
jschSession.connect();
channel = (ChannelSftp) jschSession.openChannel("sftp");
} catch (JSchException e) {
e.printStackTrace();
}
return channel;
}
public static void downloadFile(String path, String fileName) {
try {
ChannelSftp channelSftp = setupSFTP();
channelSftp.connect();
// Download file and close connection
channelSftp.get(path, LOCAL_DOWNLOAD_PATH fileName);
channelSftp.exit();
} catch (SftpException e) {
e.printStackTrace();
} catch (JSchException e) {
e.printStackTrace();
}
}
public static void uploadFile(String localPath, String remotePath) {
try {
ChannelSftp channelSftp = setupSFTP();
channelSftp.connect();
// Upload file and close connection
channelSftp.put(localPath, remotePath);
channelSftp.exit();
} catch (SftpException e) {
e.printStackTrace();
} catch (JSchException e) {
e.printStackTrace();
}
}
У вас может быть несколько функций настройки, по одной для каждого из серверов.
Ссылка: http://www.jcraft.com/jsch /
Комментарии:
1. это хорошо, но я ищу что-то, используя существующий поток заданий talend