Почему Spring Container уничтожает бобы сразу после их создания? - PullRequest
17 голосов
/ 21 сентября 2011

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

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

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

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

[DEBUG] Кэширующий компонентuploadService 'для разрешения потенциальных циклических ссылок 2011-09-21 15:19:08 org.springframework.beans.factory.annotation.InjectionMetadata

[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] Создание общего экземплярасинглтон bean 'diskFileItemFactory' 2011-09-21 15:19:08 org.springframework.beans.factory.support.DefaultListableBeanFactory

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

[INFO] Уничтожение синглетонов в org.springframework.beans.factory.support.DefaultListableBeanFactory@b0ede6: определение beans [org.*

Ответы [ 5 ]

13 голосов
/ 21 сентября 2011

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

4 голосов
/ 21 сентября 2011

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

1 голос
/ 22 августа 2013

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

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

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

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

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

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

1 голос
/ 23 мая 2013

Недавно я столкнулся с подобной проблемой. Одним из возможных решений проблемы будет проверка вашего основного класса или того места, где вы инициализируете контекст 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();
        }
    }
1 голос
/ 10 мая 2012

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

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