У меня есть пользовательский апплет, который вызывается из планировщика, чтобы открыть соединение ftp или sftp и получить или поместить несколько файлов (около 1 миллиона файлов каждый час во время пика). Проблема заключается в том, что код создает сценарии, открывающие соединение на основе хоста/порта/протокола/пользователя: pass/etc из базы данных и использует базовый ftp/sftp из Linux (RedHat). Ниже приведен фрагмент моего кода, который открывает открытую часть соединения ftp/sftp.FTPS Connection builder с java, который использует то же, что и стандартный ftp/sftp после подключения, открыт
if (colDef.getRetrieveFiles().equals("ALL")){
if (!(colDef.getConnectionType().equals("SFTP")) && (colDef.getPrefAuth().equals("PASSWORD"))) {
File scriptFile = new File(colDef.getLocalFolder() + "scripts/script999.sh");
File cmdFile = new File(colDef.getLocalFolder() + "scripts/script999.cmd");
if (scriptFile.exists()) {
scriptFile.delete();
}
if (cmdFile.exists()) {
cmdFile.delete();
}
FileWriter scriptFw = new FileWriter(colDef.getLocalFolder() + "scripts/script999.sh", true);
BufferedWriter scriptBw = new BufferedWriter(scriptFw);
FileWriter cmdFw = new FileWriter(colDef.getLocalFolder() + "scripts/script999.cmd", true);
BufferedWriter cmdBw = new BufferedWriter(cmdFw);
if (colDef.getConnectionType().equals("FTP")) {
cmdBw.write("open " + colDef.getHost() + " " + colDef.getFtpPort());
cmdBw.newLine();
cmdBw.write("user " + colDef.getUsername() + " " + colDef.getPassword());
cmdBw.newLine();
if (!colDef.getSiteCommand().equals("")) {
cmdBw.write(colDef.getSiteCommand());
cmdBw.newLine();
}
if (!colDef.getQuoteCommand().equals("")) {
cmdBw.write(colDef.getQuoteCommand());
cmdBw.newLine();
}
if (!colDef.getFTPTransferType().equals("")) {
cmdBw.write(colDef.getFTPTransferType());
cmdBw.newLine();
}
}
cmdBw.write("cd " + colDef.getSourceFolder());
cmdBw.newLine();
if (colDef.getConnectionType().equals("FTP"))
{
cmdBw.write("ls -lrt");
cmdBw.newLine();
}
if (colDef.getConnectionType().equals("SFTP"))
{
cmdBw.write("ls -lrt");
cmdBw.newLine();
}
cmdBw.write("bye");
cmdBw.newLine();
scriptBw.write("#!/bin/sh");
scriptBw.newLine();
scriptBw.write("cd " + colDef.getLocalFolder() + "inputDir/999");
scriptBw.newLine();
if ((colDef.getConnectionType().equals("SFTP")) && (colDef.getPrefAuth().equals("PUBLICKEY"))) {
scriptBw.write("sftp -oPort=" + colDef.getFtpPort() + " -b " + colDef.getLocalFolder() + "scripts/script999.cmd " + colDef.getUsername() + "@" + colDef.getHost());
//Check SFTP return code
scriptBw.newLine();
scriptBw.write("if [[ $? -ne 0 ]]; then ");
scriptBw.newLine();
scriptBw.write("echo \" SFTP Error while accessing remote producer server.\"");
scriptBw.newLine();
scriptBw.write("exit $?");
scriptBw.newLine();
scriptBw.write("fi");
}
if (colDef.getConnectionType().equals("FTP")) {
scriptBw.write("ftp -n -i -p < " + colDef.getLocalFolder() + "scripts/script999.cmd");
}
scriptBw.newLine();
scriptBw.close();
scriptFw.close();
cmdBw.close();
cmdFw.close();
finalListOfRemoteFilenames = colUtil.executeScript(scriptFile, cmdFile, colDef, 999, allProperties.getVCCollectionProperties().getProperty("DELETE_SCRIPTS").trim());
}else{ //End of FTP and SFTP with Public Key - the else applies to SFTP PASSWORD only
finalListOfRemoteFilenames = colUtil.getSFTPListOfRemoteFilenames(colDef, allProperties);
}
Что я могу использовать, чтобы открыть соединение в Двойники фьюжн для FTPS и использовать стандартные команды передачи файлов для ГЭТ и поставить (как есть пользовательские нарезание резьбы/в проверке файлов и базы данных обновления и т.д., уже встроенная и я не хочу, чтобы полностью переделать все.)
борется с этим в течение некоторого времени,
Любая помощь приветствуется. Спасибо,