Ответ 1
Сбой инициализации контекста приводит к тому, что spring уничтожает beans уже успешно созданную, а не наоборот. Вероятно, вам нужно будет довести уровень журнала до INFO или DEBUG, чтобы получить основную причину.
Сразу после создания всего 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.InjectionMetadatap >
[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.
Сбой инициализации контекста приводит к тому, что spring уничтожает beans уже успешно созданную, а не наоборот. Вероятно, вам нужно будет довести уровень журнала до INFO или DEBUG, чтобы получить основную причину.
Когда вы сталкиваетесь с ситуацией, когда вы не знаете, что вызывает проблему, удалите сложность. В вашем случае удалите большую часть вашего beans из конфигурации, будь то XML или аннотация. Начните добавлять их обратно и посмотрите, какой из них прерывает цикл запуска. Затем вы можете сосредоточиться на том, почему этот bean вызывает сбой.
Отладка - лучший способ найти основную причину. Если вы используете Eclipse для разработки, запустите в режиме отладки. дождитесь, пока элемент управления перейдет в блок catch, а в редакторе переменных вы можете найти объект исключения, который должен иметь трассировку стека. Таким образом, вы можете найти основную причину проблемы.
Недавно я столкнулся с подобной проблемой. Одним из возможных решений проблемы будет проверка вашего основного класса или где бы вы не инициализировали контекст 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();
}
}
Попробуйте увеличить объем памяти JVM
здесь: -XX:PermSize=64m -XX:MaxPermSize=128m -Xms256m -Xmx768m
Часто Spring отчаянно уничтожает beans (следовательно, связь) как способ получения некоторой памяти.
Кроме того, активность большого коллектора мусора замедляет инициализацию Spring.
Выше я предоставляю настройки для меня. В зависимости от сложности вашего приложения вы можете играть с этими значениями.
Отказ от ответственности: это не всегда так. Но часто мои приложения Spring клюют в результате запуска их с настройками памяти по умолчанию JVM.