2014-10-06 6 views
5

Spring Boot yapılandırmasında sorun yaşıyorum. Ben soketleri kullanması gereken bazı mobil cihazlarda istisna var: Ben istisnadan Gördüğünüz gibiSpring Boot etkinleştir <async-destekli> web.xml'de olduğu gibi

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) 
    ... 

, ben web.xml dosyasına gerçek ekleyerek zaman uyumsuz işlem etkinleştirmek zorunda. Ama sorun bu çünkü bende yok - projemiz Spring Boot kullanıyor.

Spring Boot'taki gibi aynı işlevselliği sağlamanın herhangi bir yolu var mı?

cevap

13

sadece dispatcherServlet@Bean tanımlamak gerekir: Bu DispatcherServletAutoConfiguration gelen varsayılan bir o geçersiz kılar

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

.

1

Belki Bahar Boot github den memuru servlet için varsayılan ve tüm filtreler

Tırnak olarak etkin async-desteğine sahip söz değer:

otomatik zaman uyumsuz destekli çünkü gerçek ayarlı DispatcherServlet, bu gibi isteklerle nasıl çalışılacağını bilir ve temel olarak bir DeferredResult gibi döndürmek için bireysel denetleyici yöntemlerine bağlıdır. Ayrıca, her filtre için ASYNC içerecek şekilde (herhangi bir filtre (getServletFilters üzerinden sağlanmış)) ile birlikte uyumsuz olarak ayarlanmış olarak DispatcherType ayarını yaptık.

En azından benim uygulama bu açıklamayı destekler