我的项目中有一个长时间运行的下载过程,持续了将近 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 上运行。