【问题标题】:Async support for Spring controller in JavaJava 中对 Spring 控制器的异步支持
【发布时间】:2015-07-01 00:15:49
【问题描述】:

当我尝试调用我的 Spring Web 客户端时,我收到错误消息:

HTTP Status 500 - Request processing failed; nested exception is java.lang.IllegalStateException: Async support must be enabled on a servlet and for all filters involved in async request processing. This is done in Java code using the Servlet API or by adding "true" to servlet and filter declarations in web.xml.

我没有访问权限/不想弄乱 web.xml 文件。我的spring控制器如下:

@Controller
@RequestMapping("/test/test")
public class MyController
{
     //Using DeferedResult and Http get / post
}

我尝试过的事情:将 @Async 放在类和 get/post 方法之上。还尝试将@EnableAsync 放在类上方。如何在 java 代码中启用异步支持而不在 web.xml 中执行它?网上找不到太多帮助

【问题讨论】:

  • 显示你的web.xml文件
  • 如我所说,我无权访问 web.xml 文件。我需要用java的方式来做
  • 是的,但您的 web.xml 可能配置不正确。这不仅仅是“Java 方式”。
  • 您是否在为您的 servlet 使用基于 Java 的配置?

标签: java spring spring-mvc asynchronous


【解决方案1】:

如果你使用 java 风格的应用程序上下文而不是 xml,下面的配置应该可以工作

@Configuration
@EnableAutoConfiguration
@EnableAsync
@ComponentScan("your.package")
public class AppConfig extends SpringBootServletInitializer implements AsyncConfigurer {

    @Override
    public Executor getAsyncExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(20);
        executor.setMaxPoolSize(100);
        executor.setQueueCapacity(200);
        executor.initialize();
        return executor;
    }

    @Override
    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
        return new MyAsyncExceptionHandler();
    }
}

这里也是 asyncExceptionHandler 的示例

public class MyAsyncExceptionHandler implements AsyncUncaughtExceptionHandler {

    static Logger log = Logger.getLogger(MyAsyncExceptionHandler.class.getName());

    @Override
    public void handleUncaughtException(Throwable throwable, Method method, Object... obj) {
        log.error("Exception message - " + throwable.getMessage());
        log.error("Method name - " + method.getName());
        for (Object param : obj) {
            log.error("Parameter value - " + param);
        }

    }

}

【讨论】:

    猜你喜欢
    • 2019-09-27
    • 1970-01-01
    • 2019-10-12
    • 2018-08-26
    • 1970-01-01
    • 2014-03-18
    • 2015-12-20
    • 1970-01-01
    • 2020-11-13
    相关资源
    最近更新 更多