Почему Spring Контейнер уничтожает Beans сразу после его создания?

Сразу после создания всего beans, объявленного в различных файлах контекста моего приложения, Spring уведомляет (см. ниже), что он уничтожает одиночные пакеты и эта инициализация контекста не удалась.

[INFO] Уничтожение синглетов в org.springframework.beans.factory.support.DefaultListableBeanFactory org.springframework.web.context.ContextLoader [ОШИБКА] Контекст Ошибка инициализации

Кто-нибудь знает, почему контейнер Spring уничтожает все beans сразу после их создания?

ПРИМЕЧАНИЕ. В выводе журнала отсутствуют предупреждения или ошибки, кроме указанной выше ошибки отказа инициализации контекста - см. ниже.

[DEBUG] Искреннее кэширование bean 'uploadService', чтобы разрешить возможные круговые ссылки 2011-09-21 15:19:08 org.springframework.beans.factory.annotation.InjectionMetadata​​p >

[DEBUG] Обработка введенного метода bean 'uploadService': AutowiredFieldElement для частного org.apache.commons.fileupload.disk.DiskFileItemFactory com.faciler.ws.services.UploadService.diskFileFactory 2011-09-21 15:19:08 org.springframework.beans.factory.support.DefaultListableBeanFactory

[DEBUG] Создание общего экземпляра singleton bean'diskFileItemFactory' 2011-09-21 15:19:08 org.springframework.beans.factory.support.DefaultListableBeanFactory

[DEBUG] Создание экземпляра bean 'diskFileItemFactory' 2011-09-21 15:19:08 org.springframework.beans.factory.support.DefaultListableBeanFactory

[INFO] Уничтожение синглетов в org.s[email protected]b0ede6: определение beans [org.springframework.beans.

Ответы

Ответ 1

Сбой инициализации контекста приводит к тому, что spring уничтожает beans уже успешно созданную, а не наоборот. Вероятно, вам нужно будет довести уровень журнала до INFO или DEBUG, чтобы получить основную причину.

Ответ 2

Когда вы сталкиваетесь с ситуацией, когда вы не знаете, что вызывает проблему, удалите сложность. В вашем случае удалите большую часть вашего beans из конфигурации, будь то XML или аннотация. Начните добавлять их обратно и посмотрите, какой из них прерывает цикл запуска. Затем вы можете сосредоточиться на том, почему этот bean вызывает сбой.

Ответ 3

Отладка - лучший способ найти основную причину. Если вы используете Eclipse для разработки, запустите в режиме отладки. дождитесь, пока элемент управления перейдет в блок catch, а в редакторе переменных вы можете найти объект исключения, который должен иметь трассировку стека. Таким образом, вы можете найти основную причину проблемы.

Ответ 4

Недавно я столкнулся с подобной проблемой. Одним из возможных решений проблемы будет проверка вашего основного класса или где бы вы не инициализировали контекст spring. Иногда случается, что исключения, создаваемые контекстом spring, пойманы и никогда не печатаются или не перебрасываются. Рассмотрим приведенный ниже пример:

AbstractApplicationContext context = null;
    try {
        context = new ClassPathXmlApplicationContext("beans.xml");
        // context.registerShutdownHook();
    } catch (Exception e) {
        e.printStackTrace();
        //print or log error
    } finally {
        if (context != null) {
            context.close();
        }
    }

Ответ 5

Краткий ответ:

Попробуйте увеличить объем памяти JVM

здесь: -XX:PermSize=64m -XX:MaxPermSize=128m -Xms256m -Xmx768m

Подробный ответ:

Часто Spring отчаянно уничтожает beans (следовательно, связь) как способ получения некоторой памяти.
Кроме того, активность большого коллектора мусора замедляет инициализацию Spring.
Выше я предоставляю настройки для меня. В зависимости от сложности вашего приложения вы можете играть с этими значениями.

Отказ от ответственности: это не всегда так. Но часто мои приложения Spring клюют в результате запуска их с настройками памяти по умолчанию JVM.