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

Tomcat7 - jdbc datasource - это, скорее всего, создаст утечку памяти

Я получаю следующие сообщения в файле журнала catalina.out, когда tomcat завершает работу. Я использую Tomcat 7.x и источник данных Tomcat JDBC.

Mar 26, 2013 1:17:52 PM org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc 
SEVERE: The web application [/my_webapp] 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. 
Mar 26, 2013 1:17:52 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads 
SEVERE: The web application [/my_webapp] appears to have started a thread named [MySQL Statement Cancellation Timer] but has failed to stop it. This is very likely to create a memory leak.

Первый утверждает, что DataSource был принудительно незарегистрирован, так что это нормально. Однако это странно, потому что я настроил метод destroy так:

<bean name="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
    <property name="username" value="root"/>
    <property name="password" value="password"/>
</bean>  

Не знаю, почему я получу второй. Один о "Таймер отмены заявления MySQL".

Любая помощь приветствуется

ИЗМЕНИТЬ 1: Я попробовал исправить, предложенную @Zelldon, и он избавляется от первой ошибки. Однако проблема с MySQL Statement Cancellation Timer все еще сохраняется

4b9b3361

Ответ 1

Попробуйте поставить sql Connector/Driver в tomcat/lib, а не на войну. Поскольку каждый раз, когда вы развертываете войну, соединитель/драйвер будет создаваться иногда, сборщик мусора не может удалить их, что закончится утечкой памяти. Поэтому попробуйте переместить разъем в папку tomcat/lib.

Пожалуйста, прочитайте следующие ответы:

Почему драйвер JDBC должен быть помещен в папку TOMCAT_HOME/lib?

Как настроить Tomcat для подключения к MySQL

Ответ 2

Он может быть связан с этой ошибкой в ​​соединителе jdbc MySQL: http://bugs.mysql.com/bug.php?id=65909.

Вы можете дождаться, когда команда MySQL исправит его, или вы попытаетесь использовать дроссель JDBC-коннектор, который отлично работает с MySQL (у вас есть просто чтобы изменить параметр в url-соединении), и в моих тестах такой ошибки нет.

Ответ 3

Я встретил ту же проблему, что и вы, и я просто откатил версию pom mysql-connector-java с 8.0.16 до 8.0.15, и проблема была решена, я думаю, что это не соответствует версии соединителя и MySQL, что вызвал проблему