300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Web应用程序 [/XXX_war_exploded] 注册了JDBC驱动程序 [com.mysql.cj.jdbc.Driver]

Web应用程序 [/XXX_war_exploded] 注册了JDBC驱动程序 [com.mysql.cj.jdbc.Driver]

时间:2022-10-28 23:28:53

相关推荐

Web应用程序 [/XXX_war_exploded] 注册了JDBC驱动程序 [com.mysql.cj.jdbc.Driver]

在使用数据库的时候创建的设备驱动程序,Tomcat终止服务时,这些设备驱动程序无法被Tomcat注销。

自6.0.24版以来,Tomcat附带了内存泄漏检测特性,当Webapp的驱动程序中有一个兼容JDBC4.0的驱动程序时,这会导致这种警告消息。

/WEB-INF/lib的auto-register时使用ServiceLoaderAPI但这不是自动的-注销在webapp关机期间。

这个消息纯粹是非正式的,Tomcat已经相应地采取了防止内存泄漏的行动。你能做什么?无视那些警告。

托姆凯特做的很好。实际的bug在其他人的代码中(有问题的JDBC驱动程序),而不是在您的代码中。

很高兴Tomcat正确地完成了它的工作,并等待JDBC驱动程序供应商修复它,以便您可以升级驱动程序。

另一方面,您不应该将JDBC驱动程序放在webapp中/WEB-INF/lib,但仅限于服务器的/lib…如果你还把它放在webapp里/WEB-INF/lib,

然后您应该手动注册并使用ServletContextListener.降级到Tomcat 6.0.23或更高版本,这样您就不会被这些警告所困扰。

但它会悄无声息地漏掉记忆。不知道这到底是不是好消息。这种类型的内存泄漏是背后的主要原因之一。

outOfMemoryError问题在Tomcat热部署期间。将JDBC驱动程序移动到Tomcat/lib文件夹,并有一个连接池数据源来管理驱动程序。

请注意,Tomcat的内置DBCP在关闭时没有正确地取消注册驱动程序。

参见bugDBCP-322作为WONTFIX关闭。您希望将DBCP替换为另一个连接池,它比DBCP做得更好。例如HikariCP,BoneCP,或者也许TomcatJDBC池.

解决方案:创建监听器,在Servlet销毁时,手动销毁这些设备驱动程序。

Enumeration drivers = DriverManager.getDrivers();

while (drivers.hasMoreElements()) {

Driver driver = (Driver) drivers.nextElement();

DriverManager.deregisterDriver(driver);

System.out.println("deregistering jdbc driver: " + driver);

}

如果你使用了DBCP连接池,在加下面的句子,保险起见。

((BasicDataSource)datasource).close();

Web应用程序 [/XXX_war_exploded] 注册了JDBC驱动程序 [com.mysql.cj.jdbc.Driver] 但在Web应用程序停止时无法注销它。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。