You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求结束后如何删除文件?Quarkus RESTEasy Reactive替代方案咨询

Quarkus Resteasy Reactive 中请求结束后清理临时文件的方案

在Quarkus搭配resteasy-reactive扩展时,有两种实用方案可以替代RestEasy的Cleanables机制,实现请求结束后自动删除临时文件:

1. 请求作用域Bean结合@PreDestroy注解

创建一个请求作用域的Bean来管理临时文件,利用@PreDestroy注解在请求生命周期结束时触发清理操作:

import jakarta.enterprise.context.RequestScoped;
import jakarta.annotation.PreDestroy;
import java.io.File;
import java.util.ArrayList;
import java.util.List;

@RequestScoped
public class TempFileCleaner {
    private final List<File> tempFiles = new ArrayList<>();

    public void addTempFile(File file) {
        tempFiles.add(file);
    }

    @PreDestroy
    void cleanup() {
        for (File file : tempFiles) {
            if (file.exists()) {
                file.delete();
            }
        }
    }
}

在REST资源类中注入这个Bean,将需要清理的临时文件添加进去即可:

import jakarta.inject.Inject;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
import java.io.File;
import java.io.IOException;

@Path("/upload")
public class UploadResource {

    @Inject
    TempFileCleaner tempFileCleaner;

    @POST
    public String handleUpload() throws IOException {
        File tempFile = File.createTempFile("upload-", ".tmp");
        // 执行文件处理逻辑
        
        tempFileCleaner.addTempFile(tempFile);
        return "处理完成";
    }
}

2. 利用请求上下文添加清理任务

通过Quarkus的QuarkusResteasyReactiveRequestContext直接向请求上下文注册清理任务,请求结束时会自动执行所有注册的任务,逻辑和原Cleanables机制高度一致:

import io.quarkus.resteasy.reactive.server.runtime.QuarkusResteasyReactiveRequestContext;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.core.Context;
import java.io.File;
import java.io.IOException;

@Path("/process")
public class ProcessResource {

    @POST
    public String processFile(@Context QuarkusResteasyReactiveRequestContext requestContext) throws IOException {
        File tempFile = File.createTempFile("process-", ".tmp");
        // 执行文件处理逻辑

        requestContext.addCleanupTask(() -> {
            if (tempFile.exists()) {
                tempFile.delete();
            }
        });
        return "处理完成";
    }
}

内容的提问来源于stack exchange,提问作者Piu130

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 18:32:34