首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c3p0数据库池错误

c3p0数据库池错误
EN

Stack Overflow用户
提问于 2010-07-23 03:25:44
回答 2查看 3.7K关注 0票数 0

在我的程序以3cp0作为我的连接池运行了大约30分钟之后,我得到了以下异常。

下面是错误:

代码语言:javascript
复制
   [java]  INFO [Timer-0] (BasicResourcePool.java:1392) - A checked-out resource is overdue, and will be destroyed: com.mchange.v2.c3p0.impl.NewPooledConnection@eaecb09
    [java] The last packet successfully received from the server was 375,017 milliseconds ago.  The last packet sent successfully to the server was 9 milliseconds ago.
    [java] Exception in thread "main" java.lang.NullPointerException
    [java]  at com.mytest.myorg.MyProg.MyProgRunner.main(MyProgRunner.java:104)

我是这样设置我的游泳池的:

代码语言:javascript
复制
ComboPooledDataSource cpds = new ComboPooledDataSource();
cpds.setDriverClass( "com.mysql.jdbc.Driver" ); //loads the jdbc driver            
cpds.setJdbcUrl( "jdbc:mysql://"+hostname+"/"+database );
cpds.setUser(username);                                  
cpds.setPassword(password);  
cpds.setMinPoolSize(5);                                     
cpds.setAcquireIncrement(5);
cpds.setMaxPoolSize(15);
cpds.setAutoCommitOnClose(true);
cpds.setIdleConnectionTestPeriod(300);
cpds.setMaxStatements(180);
cpds.setNumHelperThreads(20);
cpds.setUnreturnedConnectionTimeout(300);

我有100个线程爬行一个页面,然后15个DB线程将结果插入到我的数据库中。如果抓取任务耗时超过20秒,我将终止该线程。你知道为什么数据库连接池就这么死了吗?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2013-07-15 17:06:37

在使用c3p0时,您需要在c3p0.properties文件中初始化一些属性。其中有一个名为c3p0.unreturnedConnectionTimeout.的属性

它的值以秒为单位。如果某个查询在指定时间内没有返回结果(如您在c3p0.properties文件中为c3p0.unreturn destroyed属性指定的),则当前会话将被销毁,新会话将从会话池中拉出,但您的代码正在处理已被销毁的前一个会话。所以你的代码抛出了会话已经关闭的异常

因此,您必须找出查询可能花费的最大时间,并根据该时间设置此属性值。

干杯

票数 4
EN

Stack Overflow用户

发布于 2010-07-23 05:32:22

这篇论坛帖子可能会对你有所帮助:http://old.nabble.com/A-checked-out-resource-is-overdue--td20545738.html#a20575081

对于被杀死的线程,连接是否返回到池中?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3312600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档