programing

스프링 부트에서의 Servlet Context Listener 등록 방법

codeshow 2023. 3. 23. 22:58
반응형

스프링 부트에서의 Servlet Context Listener 등록 방법

안녕하세요 스프링 부트를 사용하기 위해 이전 코드를 다시 쓰려고 합니다.청취자가 한 명 있습니다.public class ExecutorListener implements ServletContextListener.

이 청취자를 Spring Boot에 등록하려면 어떻게 해야 하나요?시도했습니다.

@SpringBootApplication
@ComponentScan
public class Application extends SpringBootServletInitializer {

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        super.onStartup(servletContext);
        servletContext.addListener(new ExecutorListener());
    }

}

근데...contextInitialized메서드는 호출되지 않습니다.

몇 가지 시도를 할 수 있습니다.등록하세요ExecutorListener로서@Bean명시적으로:

@Bean
public ExecutorListener executorListener() {
   return new ExecutorListener();
}

또는

명시적으로 ServletRegistrationBean을 생성하여 시도할 수 있습니다.

@Bean
public DispatcherServlet dispatcherServlet() {
    DispatcherServlet servlet=new DispatcherServlet();
    servlet.getServletContext().addListener(new ExecutorListener());
    return  servlet;
}

@Bean
public ServletRegistrationBean dispatcherServletRegistration() {
    ServletRegistrationBean registrationBean = new ServletRegistrationBean(dispatcherServlet(), "/rest/v1/*");
    registrationBean
            .setName(DispatcherServletAutoConfiguration.DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME);


    return registrationBean;
}

임베디드 컨테이너를 사용하는 경우, SpringBoot 1.3.0+를 사용하는 경우, 곧 세 번째 옵션이 제공됩니다.ServletContextListener로의 실장.@WebListenerservlet 사양 3에서 스프링 중 하나에 주석을 추가합니다.@Configuration신수업@ServletComponentScan(선택사항으로 필터, 서블릿 및 리스너를 검색할 패키지를 지정합니다).

다만, 현시점에서는 1.3.0+에서만 이용 가능합니다.

문서: http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/ #boot-boot-display-displays-servlets-displays-displays

주석만 사용하여 자동 검색을 원하는 경우,ExecutorListener를 실장하다ServletContextInitializer예를 들어 다음과 같이 주석을 붙입니다.javax.annotation.ManagedBean거기서부터, 그냥 실장해 주세요.onStartup방법:

@ManagedBean
public final class ExecutorListener implements ServletContextInitializer {
  ...
    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
      ...
    }
}

또 다른 방법은 클래스 도구를 만드는 것입니다.ServletContextListener추가하다@WebListnerSpringboot에 이것이 ServletContextListener임을 알려주는 맨 위로 이동한 후 추가합니다.@ServletComponentScan(basePackages = "xxx")SpringBootApplication실제로 컨테이너에 등록하다

@WebListener
public class MyListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        ...
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        ...
    }
}

언급URL : https://stackoverflow.com/questions/32394862/how-to-register-servletcontextlistener-in-spring-boot

반응형