Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Spring框架中下载文本文件,同时从数据库中检索文本文件?_Java_Spring_Spring Boot_Stream_Java Stream - Fatal编程技术网

Java 如何在Spring框架中下载文本文件,同时从数据库中检索文本文件?

Java 如何在Spring框架中下载文本文件,同时从数据库中检索文本文件?,java,spring,spring-boot,stream,java-stream,Java,Spring,Spring Boot,Stream,Java Stream,我想动态地从数据库创建一个非常大的文本文件,并在数据仍在从数据库检索时下载它,这样用户就不会等待数据准备好开始下载过程的几分钟 我以为Java只有一种类型的流,但它看起来有几十种,所以这一种不起作用: @GetMapping(path = {"/export/testdownload"}, produces = "text/csv") @ApiOperation(value = "Test downloading") public ResponseEntity testDownloading()

我想动态地从数据库创建一个非常大的文本文件,并在数据仍在从数据库检索时下载它,这样用户就不会等待数据准备好开始下载过程的几分钟

我以为Java只有一种类型的流,但它看起来有几十种,所以这一种不起作用:

@GetMapping(path = {"/export/testdownload"}, produces = "text/csv")
@ApiOperation(value = "Test downloading")
public ResponseEntity testDownloading() {
    return ResponseEntity
        .ok()
        .body(IntStream.range(0, 5).mapToObj(i -> getData(i, 10)));
}

public Integer getData(Integer page, Integer perPage) {
    return page * perPage;
}
我想做的是这样的:

@GetMapping(path = {"/export/testdownload"}, produces = "text/csv")
@ApiOperation(value = "Test downloading")
public ResponseEntity testDownloading() {
    return ResponseEntity
        .ok()
        .body(SomeKindOfStream.range(0, 5).mapToObj(i -> getData(i, 10)));
}

public String getData(Integer page, Integer perPage) throws InterruptedException {
    TimeUnit.SECONDS.sleep(10);
    return "test,line," + page + "\n";
}

我可以从数据库中检索字符串并立即输出,但我不知道如何在仍然检索的同时连续输出这些字符串。在PHP中很容易,只需在循环中回显字符串,但在Java中,我想我需要将字符串转换为某种流,然后使用某种管道。

您看过Project Reactor和Responsive Spring吗?您可以仅使用Spring引导创建非阻塞操作,但没有简单的方法来创建非阻塞端点。您看过ProjectReactor和ResponsiveSpring吗?只能使用Spring Boot创建非阻塞操作,但是没有简单的方法来创建非阻塞端点。