Web应用程序[root]注册了JDBC驱动程序,但在Web应用程序停止时未能注销它。为了防止内存泄漏,jdbc驱动程序被强制注销

21 篇文章 0 订阅
12 篇文章 0 订阅

(后来我又碰到了几回这个错误,是关于配置log4j时候报的错,最后查出同样是由于jar包冲突,所以大家要是遇到相似的问题,可以冲这方面入手一下)

最近搭建一个SSM+activiti工作流的一个项目,搭建成功后可以成功启动,但是访问出错,在执行查询语句的时候回执行失败

java.lang.AbstractMethodError:org.mybatis.spring.transaction.SpringManagedTra

后来查找后发现是mybatis-spring的版本太低了,mybatis版本在3.4以上,需要mybatis-spring对应的版本为1.3以上在这里插入图片描述这个是mybatis官方的介绍文档,有兴趣的朋友可以自行查找相关资料 mybatis官方资料

根据文档我把mybatis-spring 的版本升级了一下
在这里插入图片描述
然后噩梦就开始了
紧接着项目就一直启动不了,也不报错,只是在tomcat的log控制台上打印了这句话
org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc The web application [ROOT] registered the JDBC driver but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered

然后各种百度都没有解决问题,有的是直接注释掉tomcat的监听器,但是这种治标不治本的办法也没法采用,然后又查到可以自己写监听器或者数据源来自己关闭,尝试过后也没有办法解决这个问题。

最后换了个思路,可能会是其他的jar版本之间有冲突导致,然后将spring 和 activiti 都换了一次版本,将spring采用的版本为4.1.6,activiti的版本改为5.22.0,之后再次启动终于报了另一个错误

java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener

此时就算是看到了这个错误也头一次感到这个错误报的好啊,终于不再是jdbc驱动程序被强制注销这个错误了 [笑哭]
后来发现这个错误是由于idea没有将修改后的jar发布出去,导致具体步骤如下

Ctrl+Alt+Shift+S弹出Project Structure窗口,在Artifacts选项到Output Layout标签中找到Available Elements

在这里插入图片描述

 点击Put into Output Root,执行后,在WEB-INF会增加lib目录,里面是项目引用的jar包,点击OK。再次部署应用就能成功运行了。 

紧接着启动中又报错

org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [com.mchange.v2.c3p0.ComboPooledDataSource] for bean with name ‘dataSource’ defined in file [F:\FileRecv\jinzunyunpingtai\target\jinzunyunpingtai\WEB-INF\classes\applicationContext-public.xml]; nested exception is java.lang.ClassNotFoundException: com.mchange.v2.c3p0.ComboPooledDataSource

看样子应该是c3p0的jar版本又不太适用了
在这里插入图片描述
上maven库找了一下发现两个c3p0
在这里插入图片描述
大家要选择上面这个的版本,修改c3p0的版本后终于成功启动。
在这里插入图片描述
历时两天终于解决完了这个错误。记录一下自己的成长。

09-Jun-2023 15:19:12.806 信息 [main] org.apache.catalina.core.StandardServer.await 通过关闭端口接收到有效的关闭命令。正在停止服务器实例。 09-Jun-2023 15:19:12.807 信息 [main] org.apache.coyote.AbstractProtocol.pause 暂停ProtocolHandler["http-nio-8080"] 09-Jun-2023 15:19:13.217 信息 [main] org.apache.catalina.core.StandardService.stopInternal 正在停止服务[Catalina] 09-Jun-2023 15:19:13.230 警告 [localhost-startStop-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc Web应用程序 [ROOT] 注册JDBC驱动程序 [com.mysql.cj.jdbc.Driver],但在Web应用程序停止无法注销它。 为防止内存泄漏JDBC驱动程序已被强制取消注册。 09-Jun-2023 15:19:13.230 警告 [localhost-startStop-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc Web应用程序 [ROOT] 注册JDBC驱动程序 [org.apache.ibatis.datasource.unpooled.UnpooledDataSource.DriverProxy],但在Web应用程序停止无法注销它。 为防止内存泄漏JDBC驱动程序已被强制取消注册。 09-Jun-2023 15:19:13.230 警告 [localhost-startStop-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads Web应用程序[ROOT]似乎启动了一个名为[mysql-cj-abandoned-connection-cleanup]的线程,但未能停止它。这很可能会造成内存泄漏。线程的堆栈跟踪:[ java.lang.Object.wait(Native Method) java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:144) com.mysql.cj.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:91) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) java.lang.Thread.run(Thread.java:750)] 09-Jun-2023 15:19:13.241 信息 [main] org.apache.coyote.AbstractProtocol.stop 正在停止ProtocolHandler ["http-nio-8080"] 09-Jun-2023 15:19:13.252 信息 [main] org.apache.coyote.AbstractProtocol.destroy 正在摧毁协议处理器 ["http-nio-8080"] 是什么原因
06-10
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值