2014-10-06 4 views
5

में सक्षम बनाता है मुझे स्प्रिंग बूट कॉन्फ़िगरेशन में कोई समस्या है। मैं जो सॉकेट का उपयोग करना चाहिए कुछ मोबाइल उपकरणों पर अपवाद है:स्प्रिंग बूट <async-support> को web.xml

java.lang.IllegalArgumentException: 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 "<async-supported>true</async-supported>" to servlet and filter declarations in web.xml. Also you must use a Servlet 3.0+ container 
    at org.springframework.util.Assert.isTrue(Assert.java:65) 
    at org.springframework.http.server.ServletServerHttpAsyncRequestControl.<init>(ServletServerHttpAsyncRequestControl.java:59) 
    at org.springframework.http.server.ServletServerHttpRequest.getAsyncRequestControl(ServletServerHttpRequest.java:202) 
    at org.springframework.web.socket.sockjs.transport.session.AbstractHttpSockJsSession.handleInitialRequest(AbstractHttpSockJsSession.java:202) 
    at org.springframework.web.socket.sockjs.transport.handler.AbstractHttpSendingTransportHandler.handleRequestInternal(AbstractHttpSendingTransportHandler.java:66) 
    at org.springframework.web.socket.sockjs.transport.handler.AbstractHttpSendingTransportHandler.handleRequest(AbstractHttpSendingTransportHandler.java:58) 
    at org.springframework.web.socket.sockjs.transport.TransportHandlingSockJsService.handleTransportRequest(TransportHandlingSockJsService.java:254) 
    at org.springframework.web.socket.sockjs.support.AbstractSockJsService.handleRequest(AbstractSockJsService.java:322) 
    at org.springframework.web.socket.sockjs.support.SockJsHttpRequestHandler.handleRequest(SockJsHttpRequestHandler.java:88) 
    at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:51) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961) 
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:646) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 
    ... 

मैं अपवाद से देख के रूप में, मैं web.xml फ़ाइल में सच जोड़कर async प्रसंस्करण सक्षम करने के लिए किया है। लेकिन यह समस्या है क्योंकि मेरे पास यह नहीं है - हमारी परियोजना स्प्रिंग बूट का उपयोग करती है।

क्या स्प्रिंग बूट में समान कार्यक्षमता प्रदान करने का कोई तरीका है?

उत्तर

13

तुम बस dispatcherServlet@Bean परिभाषित करने की जरूरत:

@Bean 
public ServletRegistrationBean dispatcherServlet() { 
    ServletRegistrationBean registration = new ServletRegistrationBean(
      new DispatcherServlet(), "/"); 
    registration.setAsyncSupported(true); 
    return registration; 
} 

यह DispatcherServletAutoConfiguration से डिफ़ॉल्ट एक है कि ओवरराइड करता है।

1

शायद यह है कि वसंत बूट async-समर्थन github से डिस्पैचर सर्वलेट के लिए डिफ़ॉल्ट और सभी फिल्टर

कोटेशन रूप से सक्षम है का उल्लेख करने के लायक:

हम स्वचालित रूप से async-समर्थित सच क्योंकि करने के लिए सेट डिस्पैचर सर्वलेट जानता है कि ऐसे अनुरोधों के साथ कैसे काम करना है और यह मूल रूप से को DeferredResult की तरह वापस करने के लिए व्यक्तिगत नियंत्रक विधियों तक है। इसके अलावा, हम के लिए एसिंक-समर्थित भी सेट करते हैं, प्रत्येक फ़िल्टर के लिए डिस्पैचर टाइप टाइप करने के साथ ASYNC को शामिल करने के लिए किसी भी फ़िल्टर (getServletFilters के माध्यम से प्रदान किया जाता है)।

कम से कम मेरी अभ्यास इस कथन का समर्थन