title: Spring Boot: "Scope 'request' is not active for the current thread" in Asynch method
body: <p>I have next simple request method inside Spring Boot controller:</p>
  
  <pre><code>@Autowired
      private BillServ billServ;
  ...
  
  @RequestMapping("/chrgcheck")
  public String chrgCheck() {
    Future&lt;Result&gt; fut = null;
    fut = billServ.useCheck();
  
   while (!fut.isDone()) {
         try {
      Thread.sleep(100);
    } catch (InterruptedException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } 
     }
   try {
      if (fut.get().err ==0) {
        return "OK";
      } else {
        return "ERROR";
      }
    } catch (InterruptedException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      return "ERROR";
    } catch (ExecutionException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      return "ERROR";
  }
  
  }
  </code></pre>
  
  <p>It calls asynch method of service bean billServ.useCheck();</p>
  
  <pre><code>  @Service
    @Scope(value="request", proxyMode=ScopedProxyMode.TARGET_CLASS)
    public class BillServ {
    ...
      @Async
      public Future&lt;Result&gt; useCheck() {
          Result res = new Result();
  
          System.out.println("Try-1");
  
          check.checkMe(1);
  
          res.err=0;
          return new AsyncResult&lt;Result&gt;(res);
      }
  </code></pre>
  
  <p>Which calls another method of request-scoped bean check.checkMe(), because I need to work with individual bean per request:</p>
  
  <pre><code>@Component
    @Scope(value="request", proxyMode=ScopedProxyMode.TARGET_CLASS)
    public class Check {
  
      public void checkMe(int i) {
        System.out.println("checkMe:"+i);
  
      }
    }
  </code></pre>
  
  <p>So, when I call request "/chrgcheck", I get next error:</p>
  
  <pre><code>  java.util.concurrent.ExecutionException: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'scopedTarget.check': Scope 'request' is not active for the current thread; consider defining a scoped proxy for this bean if you intend to refer to it from a singleton; nested exception is java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.
      at java.util.concurrent.FutureTask.report(FutureTask.java:122)
      at java.util.concurrent.FutureTask.get(FutureTask.java:192)
      at com.ric.web.BillingController.chrgCheck(BillingController.java:99)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:497)
      at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
      at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
      at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:114)
      at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
      at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
      at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
      at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
      at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
      at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
      at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
      at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
      at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
  </code></pre>
  
  <p>Why does it happen? What I should correct in my project?    </p>