10

На stop или undeploy/redeploy из следующей ошибки Spring framework 3.0.5 на основе веб-приложений регистрируется в Tomcat7's catalina.out:Почему весна Контекст не изящно закрыт?

SEVERE: The web application [/nomination##1.0-qa] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [[email protected]]) and a value of type [org.springframework.security.core.context.SecurityContextImpl] (value [[email protected]ffffff: Null authentication]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak. 

изначально я думал о реализации ServletContextListener и close() контекст там. Тем не менее, нашел ContextLoaderListener, который реализует ServletContextListener настроенное как и в web.xml:

<listener> 
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

От Javadocs:

**contextDestroyed** 

public void contextDestroyed(ServletContextEvent event) 
Close the root web application context. 
Specified by: 
contextDestroyed in interface ServletContextListener 

Итак, мой вопрос, почему ThreadLocal не чисто освобожденный ContextLoaderListener.contextDestroyed()?

Мы сталкиваемся с ошибками PermGen, и при исследовании находим это. В нескольких местах есть код, аналогичный следующему:

ApplicationContext context = WebApplicationContextUtils 
      .getWebApplicationContext(se.getSession().getServletContext()); 

MyBeanClass x = context.getBean(
      "myBean", MyBeanClass.class); 
x.someMethod(); 

Мне интересно, останавливается ли приведенный выше фрагмент в чистоте? Любые указатели будут очень благодарны.

+0

У меня возникла эта ошибка при нарушении моего корневого контекста приложения на два. Вместо одного корневого контекста с двумя контекстами дочерних сервлетов теперь у меня есть корневой контекст для начальной загрузки (с теми же двумя контекстами дочернего сервлета), и я программно создаю дочерний контекст позже. Конфигурация безопасности продолжает оставаться в контексте корневого приложения в этом проекте, но теперь появились предупреждения об утечке. Ясно, что это связано в моем случае с разбиением корневого контекста приложения на два. –

+0

@Mihai Danila У меня есть только один контекст приложения. – kmansoor

+0

Как настраивается контекст безопасности? – NimChimpsky

ответ

0

Существует много вопросов от hotdeploy, что вы должны заботиться:

1-дерегистрировать драйверов баз данных see here.

2-Close задачи в приложениях с несколькими задачами: вы можете установить задержку перезапуска в режиме разработки почти на 1 час.

3-Kill контекст весны: вы сделали выше, но обратите внимание, не импортируйте XML-форму XML.

4-Kill кешированные объекты, которые существуют в JVM-памяти: сделать небольшой объект, вы инициализируете bean in constructor? не изменяйте его ни одному конструктору, чтобы его убивать в области метода! Сколько методов в классе вызывается bean? если многие вызовы вызовов методов не ожидают, что объект java-kill выйдет из области видимости, jvm сохранит его для производительности .., поэтому держите свой класс маленьким !.

Как ваш код? вы объявляете переменную из циклов? Вы = нулевой список или объект после использования?

5- вы можете увеличить время запуска и время останова tomcat.

также см. Проекты повстанцев или springboot в качестве помощника.

Смежные вопросы