2012-10-08 34 views
4

我正在使用JSCH進行sftp文件上傳。在當前狀態下,每個線程在需要時打開並關閉連接。與JSCH一起使用連接池

如果有可能使用連接池與JSCH,以避免大量的連接打開和關閉造成的開銷?

這裏是所謂的功能的示例線程

public static void file_upload(String filename) throws IOException { 
    JSch jsch = new JSch(); 
    Session session = null; 
    try { 
     session = jsch.getSession("user", "server_name", 22); 
     session.setConfig("StrictHostKeyChecking", "no"); 
     session.setPassword("super_secre_password"); 
     session.connect(); 

     Channel channel = session.openChannel("sftp"); 
     channel.connect(); 
     ChannelSftp sftpChannel = (ChannelSftp) channel; 

     FileInputStream inputSrr = new FileInputStream(filename); 
     try { 
      sftpChannel.put(inputSrr, "/var/temp/"+filename); 
     } catch (SftpException e) { 
      e.printStackTrace(); 

     } finally { 
      if (inputSrr != null) { 
       inputSrr.close(); 
      } 
     } 

     sftpChannel.exit(); 
     session.disconnect(); 
    } catch (JSchException e) { 
     e.printStackTrace(); 
    } catch (SftpException e) { 
     e.printStackTrace(); 
    } 
} 

回答

4

內部對於我寧願commons-pool。 ;)

+0

謝謝,我會給它看看 –

+0

它對您有幫助嗎?我在問你,因爲stackoverflow建立在聲譽評分系統上。 – Mirko

+0

我忙於其他項目,所以沒有時間去嘗試。我會盡快讓你知道。 –

4

這裏的SSH連接池的實現 http://www.javacodegeeks.com/2013/02/pool-of-ssh-connections-using-apache-keyedobjectpool.html

可以使用grep4j使用這個池 https://code.google.com/p/grep4j/source/browse/trunk/src/main/java/org/grep4j/core/command/linux/SessionFactory.java?r=354

另外,還要確保你可以從執行機訪問服務器。例如,如果目標服務器不在您的範圍內。它會拋出連接超時。

+0

由於不再維護grep4j,該實現將導致新版本的java上出現類路徑問題 – svarog