我在运行web应用程序时收到此消息.它运行正常,但我在关机时收到了这个消息.
严重:Web应用程序注册了JBDC驱动程序[oracle.jdbc.driver.OracleDriver],但在Web应用程序停止时未能取消注册.为防止内存泄漏,已强制取消注册JDBC驱动程序.
如有任何帮助,我将不胜感激.
我在运行web应用程序时收到此消息.它运行正常,但我在关机时收到了这个消息.
严重:Web应用程序注册了JBDC驱动程序[oracle.jdbc.driver.OracleDriver],但在Web应用程序停止时未能取消注册.为防止内存泄漏,已强制取消注册JDBC驱动程序.
如有任何帮助,我将不胜感激.
自6.0.24版以来,Tomcat附带了memory leak detection功能,当webapp的/WEB-INF/lib
中有一个兼容JDBC 4.0的驱动程序时,它会在webapp启动时使用ServiceLoader
API自动-registers,但在webapp关闭时不会自动-deregister,这反过来会导致此类警告消息.这个消息纯粹是非正式的,Tomcat已经采取了相应的内存泄漏预防措施.
你能做什么?
忽略这些警告.Tomcat做得很好.实际的bug存在于其他人的代码(有问题的JDBC驱动程序)中,而不是你的代码中.很高兴Tomcat正确地完成了它的工作,并等待JDBC驱动程序供应商修复它,以便您可以升级驱动程序.另一方面,您不应该在webapp的/WEB-INF/lib
中删除JDBC驱动程序,而应该只在服务器的/lib
中删除.如果你仍将其保留在webapp的/WEB-INF/lib
中,那么你应该使用ServletContextListener
手动注册和注销它.
降级到Tomcat 6.0.23或更高版本,这样您就不会被这些警告所困扰.但它会悄悄地继续泄漏内存.不确定这到底是不是好消息.这些内存泄漏是Tomcat Hot部署期间OutOfMemoryError
issues背后的主要原因之一.
将JDBC驱动程序移动到Tomcat的/lib
文件夹,并使用连接池数据源来管理驱动程序.请注意,Tomcat的内置DBCP不会在关闭时正确注销驱动程序.另请参见bug DBCP-322,它以WONTFIX结尾.您更希望用另一个比DBCP做得更好的连接池来替换DBCP.例如HikariCP或Tomcat JDBC Pool.