복붙노트

[SPRING] Spring 부트는 web.xml과 같이 <async-supported> 사용 가능

SPRING

Spring 부트는 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 파일에 true를 추가하여 비동기 처리를 활성화해야합니다. 그러나 이것이 문제가되는 이유는 프로젝트가 Spring Boot를 사용하기 때문입니다.

Spring Boot에서 같은 기능을 제공 할 수있는 방법이 있습니까?

해결법

  1. ==============================

    1.당신은 dispatcherServlet @Bean을 정의 할 필요가 있습니다 :

    당신은 dispatcherServlet @Bean을 정의 할 필요가 있습니다 :

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

    DispatcherServletAutoConfiguration의 기본값을 겹쳐 씁니다.

  2. ==============================

    2.아마도 Spring Boot가 dispatcher 서블릿과 모든 필터에 기본적으로 활성화 된 비동기 지원을 가지고 있음을 언급 할 필요가 있습니다.

    아마도 Spring Boot가 dispatcher 서블릿과 모든 필터에 기본적으로 활성화 된 비동기 지원을 가지고 있음을 언급 할 필요가 있습니다.

    github에서 인용 :

    적어도 나의 연습은이 진술을지지한다.

  3. from https://stackoverflow.com/questions/26213050/spring-boot-enable-async-supported-like-in-web-xml by cc-by-sa and MIT license