0

我的项目中有一个长时间运行的下载过程,持续了将近 20 分钟,我使用 FtpClient.retrieveFile() 函数下载了这个文件。此下载过程通过另一个名为 DownloadVeDeploy.jar 的 jar 文件完成。

在我的情况下,下载过程开始,然后在近 10 分钟后第二次开始。我的下载实现是这样的;

for (FTPFile file : ftpFiles) {
                        if (file.isFile()) {
                            output = new BufferedOutputStream(
                                    new FileOutputStream(downloadfolder + "/"
                                            + file.getName()));
                            conn.retrieveFile(
                                    ftpversion + "/" + file.getName(), output);
                            // Writing into target folder for build.xml
                            output.close();
                            System.out.println(file.getName()
                                    + " isimli dosya indirildi.");
                        }
                    }

我还做了一个过滤器,在它已经运行第一个请求时不传递第二个请求。这是代码;

private IslemBaslangici() {
    }

    public static void yeniIslem(String versiyonNo) {
        IslemBaslangici islemBaslangic = new IslemBaslangici();
        islemBaslangic.versiyonNo = versiyonNo;
        islemler.add(islemBaslangic);
        sonrakiIslem();
    }

    private static void sonrakiIslem() {
        IslemBaslangici islemBaslangici = null;
        if (islemler.size() > 0) {
            islemBaslangici = islemler.get(0);
            if (!islemBaslangici.calisiyor) {
                islemBaslangici.baslat(islemler.get(0));
                islemler.remove(islemBaslangici);
                sonrakiIslem();
            }
        }
    }

此代码片段允许一次仅运行 1 个进程并将其他请求添加到队列中。所以这是我的问题,为什么我的下载过程会重复?我有一个来自客户端的多个请求的过滤器,所以它不能来自客户端,我只调用一次下载过程。

作为额外信息,我的项目在 Glassfish 3.1.2 上运行。

4

0 回答 0