如何调整Vaadin文件下载超时(非会话超时)?
Vaadin 8/24 文件下载超时解决方案
Vaadin 8 配置方式
- 调整Push超时参数:若项目启用了Push功能,默认超时时间较短,可通过以下两种方式修改:
- 在
web.xml中添加初始化参数:<init-param> <param-name>push.timeout</param-name> <param-value>300000</param-value> <!-- 设置为5分钟,单位毫秒 --> </init-param> - 通过Java代码配置Vaadin Servlet:
@WebServlet(urlPatterns = "/*", name = "MyUIServlet", asyncSupported = true) @VaadinServletConfiguration(ui = MyUI.class, productionMode = false, pushTimeout = 300000) public static class MyUIServlet extends VaadinServlet { }
- 在
- 调整容器层面的请求超时:以Tomcat为例,修改
server.xml中的Connector配置,延长连接超时:<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="300000" redirectPort="8443"/> - 异步生成文件优化:如果超时调整后仍不稳定,可改用后台异步生成方案:
- 用户点击按钮后,启动异步任务生成文件并存储到服务器临时目录
- 文件生成完成后,通过UI提示用户并提供下载链接
- 定期清理服务器上的临时文件,避免存储空间浪费
Vaadin 24 配置方式
Vaadin 24基于Spring Boot,主要通过配置文件和代码优化处理:
- 调整Push相关超时:在
application.properties中添加参数:# 设置Push超时为5分钟 vaadin.push.timeout=300000 vaadin.push.long-polling.timeout=300000 - 调整Spring Boot请求超时:修改Tomcat和异步请求超时:
server.tomcat.connection-timeout=300000 spring.mvc.async.request-timeout=300000 - 异步绑定FileDownloader:避免长时间阻塞请求,先异步生成文件再触发下载:
Button downloadBtn = new Button("下载文件"); downloadBtn.addClickListener(e -> { // 异步生成文件 CompletableFuture<InputStream> fileTask = CompletableFuture.supplyAsync(() -> { // 这里编写耗时的文件生成逻辑 try { return new FileInputStream(generateLargeFile()); } catch (IOException ex) { throw new RuntimeException(ex); } }); // 文件生成完成后绑定下载器并触发下载 fileTask.thenAccept(inputStream -> { StreamResource resource = new StreamResource("large-file.csv", () -> inputStream); FileDownloader downloader = new FileDownloader(resource); downloader.extend(downloadBtn); downloadBtn.click(); }); });
内容的提问来源于stack exchange,提问作者ropo
相关产品推荐
相关产品推荐

