返回HTTP响应并继续处理-SpringBoot

时间:2019-01-18 10:43:40

标签: spring-boot asynchronous

我正在尝试返回HTTP响应,然后继续处理。 我使用注释@EnableAsync

在配置类中启用了异步处理

在我的控制器课程中:

@GetMapping(path = "/{key}/process")
public ProcessStatus processData(@PathVariable String key) {
    dataService.processData(key); //async call
    return new ProcessStatus(true);
}

在我的服务班级:

@Async
public void processData(String key) {
    processDataUsingDB(key);
}

我最初收到错误消息

  

未找到线程绑定请求:您是在实际Web请求之外引用请求属性,还是在原始接收线程之外处理请求?如果您实际上是在Web请求中操作并且仍然收到此消息,则您的代码可能在DispatcherServlet / DispatcherPortlet之外运行:在这种情况下,请使用RequestContextListener或RequestContextFilter公开当前请求。

所以我添加了以下配置:

@Bean
public DispatcherServlet dispatcherServlet() {
    DispatcherServlet dispatcherServlet = new DispatcherServlet();
    dispatcherServlet.setThreadContextInheritable(true);
    return dispatcherServlet;
}

@Bean
public ServletRegistrationBean dispatcherServletRegistration() {
    ServletRegistrationBean registration = new ServletRegistrationBean(dispatcherServlet());
    registration.setLoadOnStartup(0);
    registration.setName(DispatcherServletAutoConfiguration.DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME);

    return registration;
}

现在我得到了错误

  

“范围'request'在当前线程中不活动;如果您打算从单例中引用它,请考虑为此bean定义作用域代理;嵌套异常为java.lang.IllegalStateException:无法请求请求属性-该请求不再有效!“

任何人都可以共享一个示例代码来完成这项工作吗? ProcessStatus bean引用范围为request的UserCredentials bean

0 个答案:

没有答案