当前位置: 首页 > 知识库问答 >
问题:

为Spring中的控制器异步方法指定超时

符棋
2023-03-14

我有一个由Java config支持的Spring MVC应用程序,我想为所有涉及Callable的异步调用设置一个默认超时

@RequestMapping
public Callable<String> doSmth() {
    return () -> {
        return "myview";
    }
}

我想有一个控制器(每个应用程序)有多少时间控制器有时间做它的东西之前请求超时。

我想要一个Java配置的示例,而不是xml

共有2个答案

江宏深
2023-03-14

您还可以通过在Tomcat的conf/server中设置“asyncTimeout”属性来覆盖默认的10秒超时。xml配置文件:

<Connector connectionTimeout="20000" asyncTimeout="30000" maxThreads="1000"
    port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
    redirectPort="8443" />

参考:https://tomcat.apache.org/tomcat-7.0-doc/config/http.html

南宫俊逸
2023-03-14

您可以通过扩展<code>WebMVCConfigureAdapter来实现这一点:

 @Configuration
//other annotations if needed
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void configureAsyncSupport(AsyncSupportConfigurer configurer) {
        configurer.setDefaultTimeout(100000); //in milliseconds
        super.configureAsyncSupport(configurer);
    }

或者直接在< code > requestmappingchandleradapter 上。

 类似资料:
  • Spring MVC也提供了构造指定控制器方法链接的机制。以下面代码为例子,假设我们有这样一个控制器: @Controller @RequestMapping("/hotels/{hotel}") public class BookingController { @RequestMapping("/bookings/{booking}") public String getBoo

  • 我正在将一个基于Spring Framework 4的应用程序升级到Spring Framework 5,它们之间的一个区别是,已被删除(自Spring Framework 4.3以来已被弃用)。 其行为的一个例子: 有没有办法在spring framework 5上模仿这种行为?使用和将300多个控制器升级到相同的行为是一项非常艰巨的任务,目前我们对的行为还可以。

  • 我的应用程序是简单的3-层Spring Boot rest Web服务,具有通常的同步endpoint。但是由于从我的服务发送请求的下游系统获得响应的时间相当长(有点像60秒),我需要向我的服务添加对异步REST调用的支持,以保存上游系统免于等待响应。换句话说,如果对下游系统的响应需要超过60秒(超时),那么上游系统会断开与我的服务的连接并继续运行... 但是当响应到来时,我的服务使用来自上游系统

  • 一个问题是,我必须使整个ActionMethod异步,我不确定这会有什么影响。当前同步的基本模式如下: 有什么想法吗?

  • 问题内容: 我的[基本] Spring Boot应用程序接受来自浏览器的请求,通过发送,并应立即收到响应-例如“ 您的请求已排队 ”。为此,我编写了一个控制器: 本类实现一个接口,是很简单的。它只有一种方法可以执行耗时的任务。我不需要此服务呼叫返回的任何内容,因为无论工作失败还是成功,都会在工作结束时发送一封电子邮件。因此它实际上看起来像: 我以为这样可以,但是浏览器的Ajax请求在返回响应之前等