2015-05-21 4 views
1

У меня есть пользовательский апплет, который вызывается из планировщика, чтобы открыть соединение 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 и использовать стандартные команды передачи файлов для ГЭТ и поставить (как есть пользовательские нарезание резьбы/в проверке файлов и базы данных обновления и т.д., уже встроенная и я не хочу, чтобы полностью переделать все.)

борется с этим в течение некоторого времени,

Любая помощь приветствуется. Спасибо,

ответ

0

Я прибегал к переделке его с помощью apache.commons.net 3.3 с использованием FTPClient & FTPSClient.

Работает как очарование. Я не знаю, почему все это было сделано со сценариями и с самого начала не использовало FTP-библиотеку.

Cheers!

 Смежные вопросы

  • Нет связанных вопросов^_^