报错:

严重: Web应用程序 [/XXX_war_exploded] 注册了JDBC驱动程序 [com.mysql.cj.jdbc.Driver],但在Web应用程序停止时无法注销它。 为防止内存泄漏,JDBC驱动程序已被强制取消注册。
……

问题描述

在用intellij开发javaweb的时候,修改了前端代码只需update resources即可,一两秒即可完成。但是如果修改了后端的代码,必须要restart server或者redeploy,如图

restart server就是重启tomcat服务器,比较慢,如果只是改了一个小地方想试一下,就需要等待十秒钟,感觉非常不好。而redeploy就是不关闭服务器,而是把项目重新部署上去,也只需要一两秒。但是redeploy的时候会出现如上问题(有些人可能不会,这个我也搞不清楚)就是说驱动程序不会在项目被销毁时自动注销,那么如果再部署一次就又会有一个驱动。我看到一个比较详细的解释是这样的

自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池.

解决办法

直接无视肯定是不好的,降低tomcat的版本也不是一个好的解决方案,将JDBC驱动程序放在服务器的/lib下也行不通,因为我需要在intellij中进行开发,如果在webapp中没有相关jar包,虽然最后运行的效果一样,但是intellij对我来说就和记事本没有区别,甚至还会因为检测不到所需类而报红。
所以只能加一个监听类手动注销这些东西。

首先新建监听类,然后在web.xml中加一个刚刚新建的类的监听器,在contextDestroyed中手动取消这些线程,如图:

代码

contextDestroyed方法

//手动取消c3p0数据库连接池try {DataSources.destroy(JdbcUtils.getDataSource());//getDataSource方法获取c3p0数据源System.out.println("关闭数据库连接池成功!");} catch (SQLException e) {e.printStackTrace();}//手动取消驱动程序的注册:Enumeration drivers = DriverManager.getDrivers();while (drivers.hasMoreElements()) {Driver driver = (Driver) drivers.nextElement();try {DriverManager.deregisterDriver(driver);System.out.println("deregistering jdbc driver: "+driver);} catch (SQLException e) {e.printStackTrace();System.out.println("Error deregistering driver"+driver);}}//手动停止名为[mysql-cj-abandoned-connection-cleanup]的线程AbandonedConnectionCleanupThread.uncheckedShutdown();

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><listener><listener-class>contextListener.ContextListener</listener-class></listener>
</web-app>

严重: Web应用程序 [/XXX_war_exploded] 注册了JDBC驱动程序 [com.mysql.cj.jdbc.Driver],但在Web应用程序停止时无法注销它。相关推荐

  1. 问题解决:严重: Web应用程序注册了JDBC驱动程序 [com.mysql.cj.jdbc.Driver],但在Web应用程序停止时无法注销它

    问题解决:严重: Web应用程序注册了JDBC驱动程序 [com.mysql.cj.jdbc.Driver],但在Web应用程序停止时无法注销它 在我练习ssm框架时,我的tomcat关闭时每次都弹出 ...

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

    在使用数据库的时候创建的设备驱动程序,Tomcat终止服务时,这些设备驱动程序无法被Tomcat注销. 自6.0.24版以来,Tomcat附带了内存泄漏检测特性,当Webapp的驱动程序中有一个兼容J ...

  3. mysql.cj.jdbc.Driver报错或者数据库Nullpointer报错

    有时候数据代码怎么看都是正确的但是往数据库里面插入数据的时候会报错很长很长,那么很有可能就是数据连接驱动版本和你的数据库版本不匹配问题. 问题1 Loading classcom.mysql.jdbc ...

  4. mac之idea连接MySQL数据库报com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

    项目场景: 最近入手了一台MacBookPro(谨慎尝试,用惯了windos后使用感具别扭,需要大量时间来适应),下载了最新的idea和最新的mysql8.0.23,然后开始了漫长而艰辛的开始,各种没 ...

  5. spring boot 2.0采用com.mysql.cj.jdbc.Driver数据库驱动引发的系统时间不一致问题

    首先简单描述一下项目情况,老板新注册了一家公司,既然有公司了肯定得有个公司门户网站.现在已经是web 2.0时代了,网站内容不可能再像以前那样全部采用静态html页面.于是开发了一个内容管理系统,简称 ...

  6. 数据库连接失败报错com.mysql.cj.jdbc.exceptions.CommunicationsException

    1.问题: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure The last pac ...

  7. mySql版本的相关问题:com.mysql.cj.jdbc.Driver和com.mysql.jdbc.Driver

    Mysql版本的相关问题:com.mysql.cj.jdbc.Driver和com.mysql.jdbc.Driver 1. 在使用mysql时,控制台日志报错如下: Loading class `c ...

  8. spring boot 使用 com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver的区别

    2019独角兽企业重金招聘Python工程师标准>>> 今天集成spring boot 2.1.1构建web应用并且集成jdbc,发现默认用的8.0.13, <dependen ...

  9. Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl问题排查

    整个问题排查过程中基本把Hikari连接池源码看完了,也发现了Hikari内部的一些实现细节,更多细节参见:Hikari 数据库连接池内部源码实现细节 问题描述及排查 最近发布项目测试环境后,发现后台 ...

最新文章

  1. wenbao与string
  2. javaweb学习总结(七)——HttpServletResponse对象(一)
  3. USACO 3.1 Agri-Net 最短网络 (最小生成树)(克鲁斯卡尔算法)
  4. Spring quartz 并发性研究
  5. Document Builder: replace variable guid in merge
  6. ASP.NET Core Kestrel部署HTTPS
  7. Ajax--让网站与时俱进
  8. 简单mysql优化_mysql常见语句的简单优化策略
  9. 一致性Hash简单介绍和使用
  10. java泛型范围_Java泛型范围
  11. windows server 安装php环境
  12. javaSE(java基础库)私人学习笔记
  13. 【python高阶编程】python线程池简单应用
  14. 惠普136nw打印机清零_HP打印机清零方法(冷复位恢复出厂设置)
  15. mathorcup数据大赛
  16. orcad导出BOM
  17. 常见排序算法、查找算法(中英文命名)
  18. 中恒建模助手bim软件中的建筑给排水设计,给水系统和中水系统什么意思?
  19. 准大四生,现在是七月中旬,要为秋招准备什么?
  20. 修改Mac默认设置使Mac支持NTFS硬盘的读写

热门文章

  1. 【留学避坑指南】全程国内网课学习不能认证学历?
  2. 中国赴莫桑比克的签证如何办理 4月攻略分享
  3. android 环信发送名片,环信自定义消息类型——名片
  4. 一个for循环打印九九乘法表
  5. 解决xshell 中文乱码
  6. PHP数组排序二维数组排序
  7. 耿大侠 Diss国外架构师文章《From CQS to CQRS》
  8. 阿里云流计算中维表join VS 流join
  9. Matplotlib 系列:colorbar 的设置
  10. @PostMapping和@GetMapping用法详解