【问题标题】:Specify timeout for controller async method in Spring在 Spring 中为控制器异步方法指定超时
【发布时间】:2015-12-17 15:40:29
【问题描述】:

我有一个由 Java 配置支持的 Spring MVC 应用程序,我想为所有涉及 Callable 接口的异步调用设置默认超时。例如,考虑这样的控制器方法:

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

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

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

【问题讨论】:

    标签: spring-mvc


    【解决方案1】:

    您可以通过扩展 WebMvcConfigurerAdapter 并覆盖 configureAsyncSupport 来做到这一点:

     @Configuration
    //other annotations if needed
    public class WebConfig extends WebMvcConfigurerAdapter {
    
        @Override
        public void configureAsyncSupport(AsyncSupportConfigurer configurer) {
            configurer.setDefaultTimeout(100000); //in milliseconds
            super.configureAsyncSupport(configurer);
        }
    

    或直接在RequestMappingHandlerAdapter上。

    【讨论】:

    • 只有在等待数据库响应时超时才有效?
    【解决方案2】:

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

    <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

    【讨论】:

      猜你喜欢
      • 2017-05-19
      • 1970-01-01
      • 2019-09-27
      • 2018-05-21
      • 1970-01-01
      • 1970-01-01
      • 2014-09-22
      • 2012-09-18
      • 1970-01-01
      相关资源
      最近更新 更多