Java 为防止内存泄漏,已强制注销JDBC驱动程序
运行Web应用程序时,我收到此消息。它运行正常,但是我在关机期间收到此消息。
严重:Web应用程序注册了JBDC驱动程序[oracle.jdbc.driver.OracleDriver],但在Web应用程序停止时未能注销它。为了防止内存泄漏,已强制注销JDBC驱动程序。
任何帮助表示赞赏。
回答:
从6.0.24版本开始,Tomcat附带了内存泄漏检测功能,当webapp中存在与JDBC 4.0兼容的驱动程序时,该漏洞又会导致这种警告消息,该驱动程序会在使用API启动webapp
时/WEB-INF/lib
自动进行注册,但是在webapp关闭期间未自动注销自身。该消息纯粹是非正式的,Tomcat已经采取了相应的内存泄漏预防措施。ServiceLoader
你能做什么?
忽略那些警告。Tomcat正在正确地执行其工作。实际的错误是在别人的代码(有问题的JDBC驱动程序)中,而不是你的代码中。对Tomcat能够正确完成工作感到高兴,并等待JDBC驱动程序供应商对其进行修复,以便你可以升级驱动程序。另一方面,你不应该在Webapp的JDBC驱动程序中删除JDBC驱动程序
/WEB-INF/lib
,而在服务器的/lib
。如果你仍将其保留在webapp的目录中/WEB-INF/lib
,则应使用进行手动注册和注销ServletContextListener。降级到Tomcat 6.0.23或更早的版本,这样你就不会被那些警告所困扰。但是它会默默地保持泄漏内存。毕竟不确定这是否很好。此类内存泄漏是Tomcat热部署期间OutOfMemoryError问题背后的主要原因之一。
将JDBC驱动程序移至
Tomcat
的/lib
文件夹,并具有连接池数据源来管理驱动程序。请注意,Tomcat的内置DBCP在关闭时无法正确注销驱动程序。另请参见错误DBCP-322,该错误已作为WONTFIX关闭。你想用另一个连接池代替DBCP,该连接池比DBCP做得更好。例如HikariCP,BoneCP或Tomcat JDBC Pool。
以上是 Java 为防止内存泄漏,已强制注销JDBC驱动程序 的全部内容, 来源链接: utcz.com/qa/434678.html