복붙노트

[SPRING] 스프링 컨텍스트를로드하지 못한 경우 서버를 중지하는 방법은 무엇입니까?

SPRING

스프링 컨텍스트를로드하지 못한 경우 서버를 중지하는 방법은 무엇입니까?

때로는 개발하는 동안 스프링 컨텍스트가로드되지 못하게하는 무언가가 손상됩니다. 문제는 때로는 오류가 일부 bean에만있는 것이지만 webapp의 나머지 부분은 부분적으로로드되고 일부 이상한 동작이 발생한다는 것입니다.

뭔가 나쁜 일이 생길 때 Spring이 서버 프로세스를 멈추게하는 알려진 방법이 있습니까? 어떤 콩이 실패한 주사처럼, 또는 일부 NPE가 PostConstruct 또는 일부에서 발생했습니다.

web.xml에서 stopOnError = true와 같은 것입니다.

해결법

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

    1.그래서 결국 내가 찾은 해결책은 다음과 같습니다. ServletContextListener를 구현하는 클래스를 만들고, ApplicationLoaderListener라고 부릅니다.

    그래서 결국 내가 찾은 해결책은 다음과 같습니다. ServletContextListener를 구현하는 클래스를 만들고, ApplicationLoaderListener라고 부릅니다.

    web.xml에서이 클래스를 설정합니다.

    <listener>
        <listener-class>com.my.package.ApplicationLoaderListener</listener-class>
    </listener>
    

    비공개 멤버를 추가하십시오.

    private final ServletContextListener loader = new ContextLoaderListener();
    

    이 클래스는 두 인터페이스 메서드를 구현해야하며 관련 인터페이스 메서드는 contextInizialized입니다.

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        try {
            loader.contextInitialized(sce);
        } catch (BeanCreationException e) {
            handle(e);
        }
    }
    

    handle ()의 구현은 다음과 같습니다.

    private void handle(BeanCreationException e) {
        log.error("=============== FATAL =============== - failed to create bean: ", e);
        System.exit(1);
    }
    

    코드 완성을 위해 두 번째 방법은 다음과 같습니다.

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        loader.contextDestroyed(sce);
    }
    
  2. from https://stackoverflow.com/questions/25347593/known-way-to-stop-server-when-spring-context-failed-to-load by cc-by-sa and MIT license