24

当 tomcat 关闭时,我在 catalina.out 日志文件中收到以下消息。我正在使用 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 已被强制注销,这很好。然而这很奇怪,因为我已经像这样配置了销毁方法:

<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相关问题仍然存在

4

3 回答 3

37

尝试将 sql 连接器/驱动程序放在 tomcat/lib 中,而不是在战争中。因为每次部署战争时都会创建连接器/驱动程序,有时垃圾收集器无法删除它们,这将导致内存泄漏。所以尝试移动tomcat/lib文件夹上的连接器。

请阅读以下答案:

为什么 JDBC 驱动程序必须放在 TOMCAT_HOME/lib 文件夹中?

如何配置Tomcat连接MySQL

于 2013-03-26T08:12:16.370 回答
1

它可能与 MySQL jdbc 连接器中的这个错误有关:http ://bugs.mysql.com/bug.php?id=65909 。

您可以等待 MySQL 团队修复它,或者您尝试使用与 MySQL 配合良好的Drizzle JDBC 连接器(您只需更改 url 连接中的参数),并且在我的测试中,没有这种的错误。

于 2013-03-26T08:21:32.610 回答
0

我遇到了和你一样的问题,我只是将mysql-connector-java的pom版本从8.0.16回滚到8.0.15,问题就解决了,我认为是connector和mysql版本不匹配导致问题

于 2019-07-11T06:19:15.210 回答