Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.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

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 服务器端长时间运行的请求超时_Java_Spring_Spring Boot_Rest_Microservices - Fatal编程技术网

Java 服务器端长时间运行的请求超时

Java 服务器端长时间运行的请求超时,java,spring,spring-boot,rest,microservices,Java,Spring,Spring Boot,Rest,Microservices,我有一个Spring Boot应用程序,我想实现的是,当我的rest控制器处理一个请求需要更长的时间时,只需发送一个错误而不继续处理该请求。这可能吗?我如何在不修改控制器级别但在应用程序级别的情况下实现它。这是在最新的Spring boot上发布的2.2.6。发布版您可以使用DeferredResult实现它 请参见此示例: @GetMapping("/test") DeferredResult<String> test(){ Long timeOutInMi

我有一个Spring Boot应用程序,我想实现的是,当我的rest控制器处理一个请求需要更长的时间时,只需发送一个错误而不继续处理该请求。这可能吗?我如何在不修改控制器级别但在应用程序级别的情况下实现它。这是在最新的Spring boot上发布的
2.2.6。发布版

您可以使用DeferredResult实现它

请参见此示例:

@GetMapping("/test")
    DeferredResult<String> test(){
        Long timeOutInMilliSec = 10000L;
        String timeOutResp = "Time Out.";
        DeferredResult<String> deferredResult = new DeferredResult<>(timeOutInMilliSec,timeOutResp);
        CompletableFuture.runAsync(()->{
            try {
                //Long pooling task;If task is not completed within 100 sec timeout response retrun for this request
                TimeUnit.SECONDS.sleep(100);
                //set result after completing task to return response to client
                deferredResult.setResult("Task Finished");
            }catch (Exception ex){
            }
        });
        return deferredResult;
    }
@GetMapping(“/test”)
延迟结果测试(){
长时间输出毫秒=10000L;
字符串timeOutResp=“超时。”;
DeferredResult DeferredResult=新的DeferredResult(timeOutInMilliSec,timeOutResp);
CompletableFuture.runAsync(()->{
试一试{
//长池任务;如果任务未在100秒内完成,则超时响应重新运行此请求
时间单位。秒。睡眠(100);
//在完成任务后设置结果以将响应返回给客户端
deferredResult.setResult(“任务完成”);
}捕获(例外情况除外){
}
});
返回延迟结果;
}
此处请求睡眠时间
100
秒,但在
延迟结果
超时设置中
10
秒。因此,10秒后,您将获得
超时。
响应。。。如果你设定 睡眠时间少于10秒,您将获得
任务完成
响应


这是详细信息。

Webflux还是MVC?我使用的是MVC。所以servlet