복붙노트

[SPRING] Spring ContextRefreshedevent가 두 번 호출되는 이유는 무엇입니까?

SPRING

Spring ContextRefreshedevent가 두 번 호출되는 이유는 무엇입니까?

ContextRefreshed 이벤트를 수신 대기하도록 등록 된 Spring ApplicationListener Bean이있다. 이상한 이유로 컨텍스트 초기화가 완료되면 onApplicationEvent (ContextRefreshedEvent) 메서드를 두 번 호출합니다. 이 정상적인 작동입니까 또는 구성에 문제가 있음을 나타 냅니까? 내 서블릿 컨테이너에 Jetty 8을 사용하고 있습니다.

내 관련 web.xml 구성은 다음과 같습니다.

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/config/spring/spring-config.xml</param-value>
</context-param>
<servlet>
    <servlet-name>Spring</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value></param-value>
    </init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet-mapping>
    <servlet-name>Spring</servlet-name>
    <url-pattern>/service/*</url-pattern>
</servlet-mapping>

감사!

해결법

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

    1.DispatcherServlet에 대한 contextConfigLocation을 지정하지 않았더라도 하위 컨텍스트를 만들고 두 번째 새로 고친 이벤트는 해당 컨텍스트에 대한 것입니다. event.getApplicationContext ()를 사용하여 이벤트가 어떤 컨텍스트인지 찾아냅니다.

    DispatcherServlet에 대한 contextConfigLocation을 지정하지 않았더라도 하위 컨텍스트를 만들고 두 번째 새로 고친 이벤트는 해당 컨텍스트에 대한 것입니다. event.getApplicationContext ()를 사용하여 이벤트가 어떤 컨텍스트인지 찾아냅니다.

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

    2.그것은 다른 사건 청취자에게도 나에게 일어났다. (ApplicationListener )

    그것은 다른 사건 청취자에게도 나에게 일어났다. (ApplicationListener )

    ContextLoaderListener를 의심하고 web.xml에서 선언을 제거하면 응용 프로그램이 제대로 작동하고있었습니다. 그런 다음 ContextLoaderListener의 용도가 무엇인지 알아 내야했습니다.

    Spring에서 ContextLoaderListener의 역할 / 목적은 무엇입니까?

    흥미로운 대답은 다음과 같습니다.

  3. ==============================

    3.그것은 벌레처럼 보입니다.

    그것은 벌레처럼 보입니다.

    https://jira.springsource.org/browse/SPR-6589

    3.0을 사용하고 있다면 3.05의 최신 릴리스에서 사용해보십시오.

  4. ==============================

    4.나도이 문제가 있었지만 그것을 고쳤다. 내 DAO에 dataSource를 주입하고 (그리고 JdbcTemplate을 인스턴스화하여) ....하지만 JDBCTemplate 용으로 구성된 Spring bean도 가지고있다.

    나도이 문제가 있었지만 그것을 고쳤다. 내 DAO에 dataSource를 주입하고 (그리고 JdbcTemplate을 인스턴스화하여) ....하지만 JDBCTemplate 용으로 구성된 Spring bean도 가지고있다.

    내 DAO에 jdbcTemplate을 주입 했어야하는데 ... 중복을 피하십시오.

  5. from https://stackoverflow.com/questions/6164573/why-is-my-spring-contextrefreshed-event-called-twice by cc-by-sa and MIT license