java:多线程,多用户Web应用程序中的FTP

时间:2013-12-19 15:21:46

标签: java multithreading web-applications static ftp

我正在使用Spring MVC开发一个应用程序。在业务流程中,生成需要从应用程序服务器检索到Web服务器的映像文件。我正在使用commons-net api以简单的方式完成它。

public class FtpUtility{
private FTPClient ftpClient = new FTPClient();

public boolean retriveFileFromApp(String srcFile, String destFile){
    boolean flag = false;
    try{
        connectToFtp()
        File dest = new File(destFile);

        if(!dest.exists())
            dest.mkdirs();
        if(dest.exists())
            dest.delete();
        FileOutputStream destStream = new FileOutputStream(dest);
        ftpClient.retrieveFile(srcFile, destStream);

    }
    catch(Exception e){
        //exception handling
    }
    finally{
        disconnect();
    }
    return flag;
}



private boolean connectToFtp(){
    boolean flag = false;
    try{
        ftpClient.connect(appserverip); // connect to ftp
        flag = ftpClient.login(ftpUserId, ftpPassword); 
    }           
    catch(Exception e){
        //exception handling
    }

    return flag;
}

private void disconnect(){
    try{
        ftpClient.logout();
        ftpClient.disconnect();
    }
    catch(Exception e){
        //some exception handling   
    }

}
}

现在,当多个用户正在使用此应用程序时,他们同时使用此类的实例进行连接,然后断开连接。即使是单个用户也在连接和断开每个文件传输。

  1. 如何有效地执行此操作,例如连接一次,然后执行全部转移然后断开连接,而不是为每次转移打开和关闭连接。

  2. 会使用静态帮助吗?如果是,如何?

1 个答案:

答案 0 :(得分:0)

这不起作用。 FTP客户端是静态的,您连接一次并通过同步串行使用它,或者它是每个会话,每个会话创建并连接并同时使用它自己。你现在的混合物都无法发挥作用。