Подтвердить что ты не робот

Веб-приложение [], похоже, запустило поток с именем [Abandoned connection cleanup thread] com.mysql.jdbc.AbandonedConnectionCleanupThread

В середине моей веб-разработки я просто закрою свое веб-приложение в своей Eclipse IDE, примерно через минуту я просто увидел ПРЕДУПРЕЖДЕНИЕ в моей консоли eclipse.

WARNING: The web application [/Spring.MVC] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
Sep 06, 2014 8:31:55 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
WARNING: The web application [/Spring.MVC] appears to have started a thread named [Abandoned connection cleanup thread] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
 java.lang.Object.wait(Native Method)
 java.lang.ref.ReferenceQueue.remove(Unknown Source)
 com.mysql.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:40)
Sep 06, 2014 8:32:00 PM org.apache.catalina.core.ApplicationContext log
INFO: No Spring WebApplicationInitializer types detected on classpath
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Sep 06, 2014 8:32:00 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring root WebApplicationContext
Sep 06, 2014 8:32:03 PM org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation
INFO: HHH000204: Processing PersistenceUnitInfo [
    name: personPU
    ...]

Это не вызвало утечки памяти до сих пор, я проверил свой VisualVM, все работает как обычно, но по мере того, как я больше об этом разбираюсь, я понимаю, что это предупреждение вызвано тем, что драйвер MySQL не освобождает ресурсы или не закрывается (я не знаю, как сказать это точно), и я оказался в этом сообщении в SO связанной проблеме

и OP прав, ответ "не беспокойтесь об этом" будет недостаточным. Это предупреждение беспокоит меня, потому что это может дать мне некоторые будущие проблемы с сохранением, и это меня очень беспокоит, я пробовал код, написанный OP, но у меня проблема , что библиотеки > должен ли я использовать этот код для работы. Это то, что я получил намного.

import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Enumeration;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import org.hibernate.annotations.common.util.impl.LoggerFactory;
import com.mysql.jdbc.AbandonedConnectionCleanupThread;
@WebListener
public class ContextFinalizer implements ServletContextListener {

private static final Logger LOGGER = LoggerFactory.getLogger(ContextFinalizer.class);

public void contextInitialized(ServletContextEvent sce) {
}

public void contextDestroyed(ServletContextEvent sce) {
    Enumeration<Driver> drivers = DriverManager.getDrivers();
    Driver d = null;
    while (drivers.hasMoreElements()) {
        try {
            d = drivers.nextElement();
            DriverManager.deregisterDriver(d);
            LOGGER.warn(String.format("Driver %s deregistered", d));
        }
        catch (SQLException ex) {
            LOGGER.warn(String.format("Error deregistering driver %s", d), ex);
        }
    }
    try {
        AbandonedConnectionCleanupThread.shutdown();
    }
    catch (InterruptedException e) {
        logger.warn("SEVERE problem cleaning up: " + e.getMessage());
        e.printStackTrace();
    }
  }
}

Я просто хочу знать, какие библиотеки мне нужны или если я использую правильные библиотеки для правильной реализации, я даже не знаю, что должен использовать Logger, спасибо за любую помощь,

4b9b3361

Ответ 1

См. этот ответ. Кажется, что драйвер MySQL должен находиться в {$TOMCAT]/lib, разделяемом между приложениями. Убедитесь, что вы не включаете его в каждое приложение. По крайней мере, это сработало для меня, и я смог удалить предупреждение.

Если вы используете Maven, укажите зависимость, как указано.


UPDATE:
Основная причина заключается в том, что у Tomcat есть проблемы с сборщиком мусора, потому что он зарегистрирован в одноэлементном, распространенном для нескольких приложений. Закрытие одного приложения не позволяет Tomcat освобождать драйвер. См. Этот ответ.

Ответ 2

Это работает для меня.

Проблема была с упругим поиском в моем случае.

Отправьте запрос DELETE от почтальона на конечную точку ниже и перезапустите приложение.

http://localhost:9200/*