Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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 springmvc中的长时间运行_Java_Spring Mvc - Fatal编程技术网

Java springmvc中的长时间运行

Java springmvc中的长时间运行,java,spring-mvc,Java,Spring Mvc,我正在为我的SpringMVC应用程序实现一个长时间运行的调用。下面是电话的样子: @GetMapping(value = "/generate") public void longOperation(HttpServletResponse response, HttpServletRequest request) throws IOException { //do heavy calculation Object jobResult; while (...) {

我正在为我的SpringMVC应用程序实现一个长时间运行的调用。下面是电话的样子:

@GetMapping(value = "/generate")
public void longOperation(HttpServletResponse response, HttpServletRequest request) throws IOException {
    //do heavy calculation
    Object jobResult;
    while (...) {
        //do job    
    }

    //output result
    response.getOutputStream().println(jobResult.toString());
}
@GetMapping(value = "/generate")
public void longOperation(HttpServletResponse response, HttpServletRequest request) throws IOException {
    //do heavy calculation
    Object jobResult;
    while (...) {
        //do job
        if (userHasCancelledTheCall) return;    
    }

    //output result
    response.getOutputStream().println(jobResult.toString());
}
在一段时间的通话中,我进行了大量内存计算(5分钟以上)。我不在输出流中写入任何内容。计算完成后,我将结果放入输出流。结果很小(几个字节)

但是,如果用户决定取消HTTP调用(关闭浏览器或终止curl会话),我也希望取消计算。理想情况下,代码应该如下所示:

@GetMapping(value = "/generate")
public void longOperation(HttpServletResponse response, HttpServletRequest request) throws IOException {
    //do heavy calculation
    Object jobResult;
    while (...) {
        //do job    
    }

    //output result
    response.getOutputStream().println(jobResult.toString());
}
@GetMapping(value = "/generate")
public void longOperation(HttpServletResponse response, HttpServletRequest request) throws IOException {
    //do heavy calculation
    Object jobResult;
    while (...) {
        //do job
        if (userHasCancelledTheCall) return;    
    }

    //output result
    response.getOutputStream().println(jobResult.toString());
}
实现这一点的一种方法是尝试向response.getOutputStream()写入一些内容。如果用户关闭HTTP连接,则尝试将引发异常。然而,我不想在那里写任何东西

有没有办法检查响应连接是否仍然有效,是否值得继续计算


谢谢

您是否绝对希望用户在空白的白色屏幕上等待5分钟?我的想法是使调用异步,并立即返回调用的ID。然后一个单独的函数来取消基于idies的操作,我希望用户等待。这是一个内部接口,大多数用户都会执行curl控制台调用。好的,如果他们离开页面或取消,您希望它取消操作吗?是否要回滚在此之前所做的更改?如果您回答以下问题,我将花费大量时间为您提供一个完整的答案。检查我的Liferay答案我花了很多时间them@ChrisMaggiulli谢谢你的帮助。真的,没什么可取消的。该代码只执行只读操作,例如:通过REST API从数据库下载数据,并对内存中的数据进行计算密集型计算。您是否绝对希望用户在空白的白色屏幕上等待5分钟?我的想法是使调用异步,并立即返回调用的ID。然后一个单独的函数来取消基于idies的操作,我希望用户等待。这是一个内部接口,大多数用户都会执行curl控制台调用。好的,如果他们离开页面或取消,您希望它取消操作吗?是否要回滚在此之前所做的更改?如果您回答以下问题,我将花费大量时间为您提供一个完整的答案。检查我的Liferay答案我花了很多时间them@ChrisMaggiulli谢谢你的帮助。真的,没什么可取消的。该代码只执行只读操作,例如:通过RESTAPI从数据库下载数据,并对内存中的数据进行计算密集型计算