JDBC连接池的问题。 请问在什么情况下,会出现这种问题啊? 找了好久,找不到原因......

org.apache.tomcat.jdbc.pool.ConnectionPoolabandon警告:ConnectionhasbeenabandonedPooledC... org.apache.tomcat.jdbc.pool.ConnectionPool abandon
警告: Connection has been abandoned PooledConnection[com.mysql.jdbc.JDBC4Connection@5ebeda8]:java.lang.Exception
at org.apache.tomcat.jdbc.pool.ConnectionPool.getThreadDump(ConnectionPool.java:1023)
at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:752)
at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:600)
at org.apache.tomcat.jdbc.pool.ConnectionPool.getConnection(ConnectionPool.java:179)
at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:126)
at com.smartererp.common.db.BaseDao.getConn(BaseDao.java:71)
at com.smartererp.cos.biz.order.OrderDAO.generateMakeorderSyncInfo(OrderDAO.java:823)
at com.smartererp.cos.biz.order.OrderManager.makeOrder(OrderManager.java:54)
at com.smartererp.cos.ui.order.OrderFacade.makeOrder(OrderFacade.java:40)
at pc.PC001Action._btnMusterPass(PC001Action.java:78)
at pc.PC001Action.execute(PC001Action.java:25)
at com.needtool.jdf.TemplateAction.doprocess(TemplateAction.java:64)
at com.needtool.jdf.DispatchServlet.processRequest(DispatchServlet.java:190)
at com.needtool.jdf.DispatchServlet.doPost(DispatchServlet.java:306)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at com.needtool.jdf.CommonFilter.doFilter(CommonFilter.java:21)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
展开
 我来答
月光馨语
2018-04-05 · TA获得超过2.9万个赞
知道小有建树答主
回答量:236
采纳率:100%
帮助的人:4.3万
展开全部

你指的是JDBC连接池连接超时失效问题的问题吧?

这是因为mysql默认保持连接的时间是8小时,如果这个连接在8小时内无人访问的话,就会关闭这个连接。但是连接池设计的时候没有考虑到这个问题,还把失效的连接拿出去就会导致出现异常。

解决方法:

1、创建一个线程每隔一段时间就测试一下连接,保持连接时最新的,永远达不到8小时无人访问。

2、连接池取连接的时候判定是否这个连接有效。

[java] view plain copy

  • if (conn.isValid(1000)){  

  • return conn;  

  • }  

  • else{  

  • return this.CreateConnection();  

  • }  

    3、不使用连接池,直接拿了就用,用了就还。

    连接池的概念:

    用池来管理Connection,这可以重复使用Connection。有了池,所以我们就不用自己来创建Connection,而是通过池来获取Connection对象。当使用完Connection后,调用Connection的close()方法也不会真的关闭Connection,而是把Connection“归还”给池。池就可以再利用这个Connection对象了。

    JDBC数据库连接池接口(DataSource):

    Java为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商可以让自己的连接池实现这个接口。这样应用程序可以方便的切换不同厂商的连接池!

    yunnysunny
    2012-07-08 · TA获得超过123个赞
    知道小有建树答主
    回答量:224
    采纳率:100%
    帮助的人:53.8万
    展开全部
    推荐在使用连接池的情况下connection对象每次用完后都关闭。
    这种情况我看应该修改一下jdbc连接池的配置。添加如下配置:
    removeAbandoned:true
    removeAbandonedTimeout:120
    testOnBorrow:true
    logAbandoned:true
    本回答被网友采纳
    已赞过 已踩过<
    你对这个回答的评价是?
    评论 收起
    zhu_xiaolei_OK
    2012-07-06
    知道答主
    回答量:34
    采纳率:0%
    帮助的人:13.9万
    展开全部
    按字面意思是连接一个被抛弃的连接池!
    已赞过 已踩过<
    你对这个回答的评价是?
    评论 收起
    死亡幽谷
    2012-07-06 · TA获得超过248个赞
    知道小有建树答主
    回答量:274
    采纳率:0%
    帮助的人:137万
    展开全部
    你这是在什么情况下发生的这个错误呢?tomcat启动的时候吗?还是启动以后,请求的时候出的错误呢?
    追问
    已经好了,谢谢啊。
    追答
    把解决问题的方法贴出来,以方便后来人
    已赞过 已踩过<
    你对这个回答的评价是?
    评论 收起
    wlx_1271780265
    2012-07-06 · 超过19用户采纳过TA的回答
    知道答主
    回答量:254
    采纳率:0%
    帮助的人:56万
    展开全部
    可能是Connection连接方面的问题,你可以检查一下端口号、数据库名,然后一些配置等等方面的问题
    已赞过 已踩过<
    你对这个回答的评价是?
    评论 收起
    夜落霜华白
    2012-07-07 · 超过23用户采纳过TA的回答
    知道答主
    回答量:55
    采纳率:100%
    帮助的人:20万
    展开全部
    重新启动一下Tomcat试试呢~
    已赞过 已踩过<
    你对这个回答的评价是?
    评论 收起
    Jerony123
    2012-07-08 · TA获得超过154个赞
    知道答主
    回答量:103
    采纳率:0%
    帮助的人:45.2万
    展开全部
    从连接池哪里着手应该能找到解决方法的
    已赞过 已踩过<
    你对这个回答的评价是?
    评论 收起
    收起 7条折叠回答
    收起 更多回答(8)
    推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

    为你推荐:

    下载百度知道APP,抢鲜体验
    使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
    扫描二维码下载
    ×

    类别

    我们会通过消息、邮箱等方式尽快将举报结果通知您。

    说明

    0/200

    提交
    取消

    辅 助

    模 式