Почему мое событие Spring ContextRefreshed вызывается дважды? - PullRequest
19 голосов
/ 29 мая 2011

У меня зарегистрирован бин Spring ApplicationListener для прослушивания событий ContextRefreshed. Однако по какой-то странной причине я получаю два вызова метода 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>

Спасибо!

Ответы [ 4 ]

25 голосов
/ 29 мая 2011

Даже если вы не указали contextConfigLocation для своего DispatcherServlet, он все равно создает дочерний контекст, и второе обновленное событие предназначено для этого контекста.Используйте event.getApplicationContext (), чтобы узнать, для какого контекста это событие.

2 голосов
/ 15 апреля 2014

это случилось и со мной, на другом слушателе событий.(ApplicationListener<AuthenticationFailureBadCredentialsEvent>)

Я подозревал ContextLoaderListener , и когда я удалил объявление из файла web.xml, приложение работало правильно.Затем я должен был выяснить, какова его цель, ContextLoaderListener ...

Роль / Назначение ContextLoaderListener в Spring?

интересный ответ:

ContextLoaderListener является необязательным.Просто чтобы уточнить здесь: вы можете загрузить приложение Spring без какой-либо настройки ContextLoaderListener ... просто базовый минимум web.xml с DispatcherServlet

1 голос
/ 16 марта 2012

У меня тоже была эта проблема, но я ее исправил.Я вставлял источник данных в мой DAO (и создавал с его помощью JdbcTemplate) .... но у меня также был настроен компонент Spring для JDBCTemplate.

Я должен был ввести свой DAO с помощью jdbcTemplate ..., чтобы избежать дублирования.

1 голос
/ 29 мая 2011

Похоже, ошибка.

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

Если вы используете 3.0, попробуйте последний доступный выпуск - 3.05.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...