我在运行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已经采取了相应的内存泄漏预防措施.

你能做什么?

  1. 忽略这些警告.Tomcat做得很好.实际的bug存在于其他人的代码(有问题的JDBC驱动程序)中,而不是你的代码中.很高兴Tomcat正确地完成了它的工作,并等待JDBC驱动程序供应商修复它,以便您可以升级驱动程序.另一方面,您不应该在webapp的/WEB-INF/lib中删除JDBC驱动程序,而应该只在服务器的/lib中删除.如果你仍将其保留在webapp的/WEB-INF/lib中,那么你应该使用ServletContextListener手动注册和注销它.

  2. 降级到Tomcat 6.0.23或更高版本,这样您就不会被这些警告所困扰.但它会悄悄地继续泄漏内存.不确定这到底是不是好消息.这些内存泄漏是Tomcat Hot部署期间OutOfMemoryError issues背后的主要原因之一.

  3. 将JDBC驱动程序移动到Tomcat的/lib文件夹,并使用连接池数据源来管理驱动程序.请注意,Tomcat的内置DBCP不会在关闭时正确注销驱动程序.另请参见bug DBCP-322,它以WONTFIX结尾.您更希望用另一个比DBCP做得更好的连接池来替换DBCP.例如HikariCPTomcat JDBC Pool.

Java相关问答推荐

将@ManyToOne JPA Composite Key用作Id保存实体添加额外参数

获取拦截器内部的IP地址

具有额外列的Hibert多对多关系在添加关系时返回NonUniqueHealthExcellent

Mat. n_Delete()和Mat. n_release的区别

inteliJ中是否有一个功能可以自动在块注释中的/*后面添加一个空格?''

Apache POI:使用反射获取zoom 级别

Spring Boot Maven包

计算两个浮点数之间的距离是否对称?

如何使用值中包含与号的查询参数创建一个java.net.URI

通过Spring Security公开Spring Boot执行器端点

带错误BER验证的itext8签名返回pdf

Docker不支持弹性APM服务器

如何在JavaFX循环中完美地制作一个AudioClip/MediaPlayer?

扩展视图高度,并将其拖动到较低的视图上,而不是将其向下推?

为什么有两种实现来检索数组类的组件类型?

有谁能帮我修一下这个吗?使输出变得更加整洁

S数学.exp的相同错误保证也适用于StrictMath.exp吗?

Kotlin-仅替换字符串中最后一个给定的字符串

验证没有';t work on Hibernate Entity';s字段

如何显示新布局