我的生产服务器每个 block 有数百个用户,我意识到导出数据可能会耗尽内存并破坏多个用户的应用程序。
我们正在谈论单个用户导出的数百万数据。
有没有办法创建 CSV 文件并将其在生成时流式传输到前端以使用尽可能少的内存?
进行前端请求批量并在前端生成 CSV 文件不是一个选项,此调用将用于其他平台,我正在努力使其对所有人来说尽可能干净。
最佳答案
如果你看Spring Framework Documentation上Spring Web MVC ,部分1.4.3. Handler Methods ,小节Return Values ,你会发现很多返回流数据的方法,例如
void
- 具有void
返回类型(或null
返回值)的方法被视为已完全处理响应如果它还有ServletResponse
或OutputStream
参数或@ResponseStatus
注释。ResponseBodyEmitter
- 异步发出对象流,以使用HttpMessageConverter
写入响应;还支持作为 ResponseEntity 的主体。请参阅Async Requests和 HTTP Streaming .
这意味着你可以做到:
同步:自己将原始响应写入处理程序方法中的 HTTP 响应流。当方法返回时响应完成。
异步:在处理程序方法中准备流式传输(包括 HTTP header ),然后在另一个线程中执行实际流式传输。
关于java - 如何在 Java Spring MVC 创建时将大量数据作为文件提供?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50651833/