java - 如何在 Java Spring MVC 创建时将大量数据作为文件提供?

标签 java spring performance model-view-controller stack-overflow

我的生产服务器每个 block 有数百个用户,我意识到导出数据可能会耗尽内存并破坏多个用户的应用程序。

我们正在谈论单个用户导出的数百万数据。

有没有办法创建 CSV 文件并将其在生成时流式传输到前端以使用尽可能少的内存?

进行前端请求批量并在前端生成 CSV 文件不是一个选项,此调用将用于其他平台,我正在努力使其对所有人来说尽可能干净。

最佳答案

如果你看Spring Framework DocumentationSpring Web MVC ,部分1.4.3. Handler Methods ,小节Return Values ,你会发现很多返回流数据的方法,例如

  • void - 具有 void 返回类型(或 null 返回值)的方法被视为已完全处理响应如果它还有 ServletResponseOutputStream 参数或 @ResponseStatus 注释。

  • ResponseBodyEmitter - 异步发出对象流,以使用 HttpMessageConverter 写入响应;还支持作为 ResponseEntity 的主体。请参阅Async RequestsHTTP Streaming .

这意味着你可以做到:

  • 同步:自己将原始响应写入处理程序方法中的 HTTP 响应流。当方法返回时响应完成。

  • 异步:在处理程序方法中准备流式传输(包括 HTTP header ),然后在另一个线程中执行实际流式传输。

关于java - 如何在 Java Spring MVC 创建时将大量数据作为文件提供?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50651833/

相关文章:

java - 如何递归画线

java - 运行测试时,模拟类永远不会给出空指针

python - 为什么 Python 排序比 C++ 快

java - 运行错过的 Quartz 作业

java - 我如何从 url (java) 获取 JSON 作为字符串

spring - 能够在应用程序中动态切换持久性单元 (JPA)

Spring - 使用 cookie 的 RESTful 身份验证

javascript - 使用 $(this).scrollWidth 获取实际宽度非常慢

java - 多核 CPU 上的 logback isDebugEnabled() 速度慢吗?

java - Apache maven : where do dependencies and libraries installed locally up?