как подключиться к нескольким ftp-сайтам на основе имени ftphost, используя одно задание talend

#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