hibernate+spring配置c3p0连接池的异常

evajhhotcc 2009-02-09 01:29:47
小弟现在正进行一个项目,数据库连接使用hibernate3+spring 配置c3p0连接池
jdk 1.5 应用服务器TOMCAT 5.5.27 数据库PostgreSQL 8.3
配置文件applicationContext-hibernate.xml的片段如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:database.properties"/>
</bean>
<!-- c3p0连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
property name="driverClass" value="org.postgresql.Driver"/>
<property name="jdbcUrl" value="jdbc:postgresql://124.207.159.153:5432/edc"/>
<!-- 当连接池耗尽时候,一次获得连接数-->
<property name="acquireIncrement" value="5"/>
<!-- 连接池最大数 -->
<property name="maxPoolSize" value="10"/>
<!-- 连接池最小数-->
<property name="minPoolSize" value="5"/>

<property name="initialPoolSize" value="5"/>
<!-- 当连接池连接耗尽时,客户端getConnection(),所等待的时间-->
<property name="checkoutTimeout" value="1000"/>
<!-- 当连接失效时,或得连接的次数,0为无限次(重连)-->
<property name="acquireRetryAttempts" value="1"/>
<!-- 用户名 -->
<property name="user" value="admin"/>
<property name="preferredTestQuery" value="SELECT 1"/>
<property name="idleConnectionTestPeriod" value="18000"/>
<property name="maxIdleTime" value="25000"/>
<property name="testConnectionOnCheckout" value="true"/>
<!-- 用户密码-->
<property name="password" value="admin"></property>
</bean>

在启动tomcat的时候出现异常:
java.sql.SQLException: An attempt by a client to checkout a Connection has timed out.
at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:104)
at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:65)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:234)
at com.mchange.v2.c3p0.PoolBackedDataSource.getConnection(PoolBackedDataSource.java:94)
at com.mchange.v2.c3p0.ComboPooledDataSource.getConnection(ComboPooledDataSource.java:521)
at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:81)
at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:72)
at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:1463)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1004)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:805)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:745)
at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:134)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1175)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1145)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:427)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:144)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:276)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:360)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:91)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:75)
at com.elink.edc.servlet.Server_Console.start(Server_Console.java:110)
at com.elink.edc.servlet.Server_Console.init(Server_Console.java:61)
at javax.servlet.GenericServlet.init(GenericServlet.java:212)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1139)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:966)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3956)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4230)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:760)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:740)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:544)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:927)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:890)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1150)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1022)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:448)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
Caused by: com.mchange.v2.resourcepool.TimeoutException: internal -- timeout at awaitAcquire()
at com.mchange.v2.resourcepool.BasicResourcePool.awaitAcquire(BasicResourcePool.java:968)
at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:208)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:232)
... 49 more
请教诸位高手,这个异常是什么意思,该如何下手解决这个异常呢???100分送上,不够再加!!
...全文
6948 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
nayouzenmyang 2011-11-23
  • 打赏
  • 举报
回复
恩…… 各位有好的解决办法没?我也遇到这个问题了 个人觉得是有些资源没释放的原因 不知道对不对
sx012 2011-04-28
  • 打赏
  • 举报
回复
另外,数据库缓冲池的使用情况可以通过mysql提供的administrator 工具中的health选项查看。
sx012 2011-04-28
  • 打赏
  • 举报
回复
相同的问题啊。应该是数据库缓冲池用尽,导致无法再使用造成的。
而形成缓冲池用尽的原因据说是没有释放hibernate的session,但我的session都是通过hibernatedaosupport中提供的回调函数来管理并用aop添加事务来管理的啊,如下
HibernateCallBack匿名内部类的doInHibernate(session)方法的传入参数

通过该方法将session暴露给spring容器进行切面事务管理。


难道是哪里的代码还用到了session,并且该session无法被spring的事务管理?
alanter 2010-10-29
  • 打赏
  • 举报
回复
配置文件中的这里设置好就没问题了:

c3p0.checkoutTimeout = 20000

注意单位是 毫秒

这个设置建立数据库连接 也就是获得 connection的时间 ,太短就会出这个事情。
wolen_19870802 2010-09-25
  • 打赏
  • 举报
回复
我也遇到了这个问题,哪位高手指点一下该怎么解决。
思...无邪 2010-05-14
  • 打赏
  • 举报
回复
15楼的意思是,将
<property name="checkoutTimeout">
<value>100</value>
</property>
这个属性注释掉,在缺省的情况下,默认 checkoutTimeout 的值为0,就是无限期等待,直到连接上为止。
我的连接池配里就没有这个属性。可是也会报出一个警告,虽不影响系统正常运行,但总觉得别扭。
本地tomcat,局域网Mysql数据库。以下是警告信息。希望大虾们给与帮助....
--10:17:44,000 WARN :com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector. com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@1e8ce62 -- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks!
--10:17:44,062 WARN :com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector. com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@1e8ce62 -- APPARENT DEADLOCK!!! Complete Status:
Managed Threads: 3
Active Threads: 3
Active Tasks:
com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@1d9e040 (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1)
com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@1119a16 (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0)
com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@9b2735 (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2)
Pending Tasks:
com.mchange.v2.resourcepool.BasicResourcePool$1RefurbishCheckinResourceTask@2b32f1
Pool thread stack traces:
Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1,5,main]
java.net.SocketInputStream.socketRead0(Native Method)
java.net.SocketInputStream.read(SocketInputStream.java:129)
com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:113)
com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:160)
com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:188)
com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1910)
com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:501)
com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:971)
com.mysql.jdbc.Connection.createNewIO(Connection.java:2670)
com.mysql.jdbc.Connection.<init>(Connection.java:1531)
com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:135)
com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)
com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)
com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)
com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32)
com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)
com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0,5,main]
java.net.SocketInputStream.socketRead0(Native Method)
java.net.SocketInputStream.read(SocketInputStream.java:129)
com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:113)
com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:160)
com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:188)
com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1910)
com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:501)
com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:971)
com.mysql.jdbc.Connection.createNewIO(Connection.java:2670)
com.mysql.jdbc.Connection.<init>(Connection.java:1531)
com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:135)
com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)
com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)
com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)
com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32)
com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)
com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2,5,main]
java.net.SocketInputStream.socketRead0(Native Method)
java.net.SocketInputStream.read(SocketInputStream.java:129)
com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:113)
com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:160)
com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:188)
com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1910)
com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:501)
com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:971)
com.mysql.jdbc.Connection.createNewIO(Connection.java:2670)
com.mysql.jdbc.Connection.<init>(Connection.java:1531)
com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:135)
com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)
com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)
com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)
com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32)
com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)
com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
gengen201314 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 wlh_kingdee 的回复:]

我也出现过同样错误,

后将下面这些注掉就可以了。就是checkoutTimeout值要注掉

<property name="checkoutTimeout">
<value>100</value>
</property>
[/Quote]

不是很懂
wlh_kingdee 2009-08-25
  • 打赏
  • 举报
回复
我也出现过同样错误,

后将下面这些注掉就可以了。就是checkoutTimeout值要注掉

<property name="checkoutTimeout">
<value>100</value>
</property>
jiangxiaorong 2009-05-26
  • 打赏
  • 举报
回复
我现在也是遇到这个问题呀, 有没有哪个高手可以指点一下呀
evajhhotcc 2009-02-11
  • 打赏
  • 举报
回复
远程连接还是没有解决 , 不知如何是好 希望有大侠帮忙啊!!!
极速开发 2009-02-10
  • 打赏
  • 举报
回复
我也遇到了这样的问题
我的是连接上数据库,做了十几次查询操作后就变成An attempt by a client to checkout a Connection has timed out
后来我把连接时间设的长了一些,但是还是感觉用了测试数据多了就卡死
但是重新加载到tomcat后又可以操作了
现在还没想好怎么解决
evajhhotcc 2009-02-10
  • 打赏
  • 举报
回复
我昨天已经把连接本地的sql异常解决了,但是连接远程的还是出现这个异常,正在解决中。。。!!!
evajhhotcc 2009-02-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 Ami121 的回复:]
共享一下我的项目中配置c3p0的配置 供lz参考

Java code
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/sodddata?useUnicode=true&characterEncoding=GBK"></property>
<property n…
[/Quote]

非常感谢这位大侠的提示 但是我觉得我的配置文件和你写的区别不大 呵呵 再次感谢
evajhhotcc 2009-02-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sjqzone 的回复:]
An attempt by a client to checkout a Connection has timed out.
连接超时了,连接的等待时间设置长点。
[/Quote]

我刚才试了一次8000的设置 结果一样
evajhhotcc 2009-02-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 gzbtiantian 的回复:]
An attempt by a client to checkout a Connection has timed out. 连接超时。 数据库连接不上,
tomcat和数据库是在一台机器上吗? admin用户让连接吗? 和你的配置文件没关系。
[/Quote]

tomcat 是我本机的 数据库是在一台Debian linux服务器上的 admin用户权限肯定够 没问题 但是就是连接不上
zhoushaolan 2009-02-09
  • 打赏
  • 举报
回复
是啊,楼上的都说对了,
发现一点小小的意外,原来连接池配置了,hibernate会在连接池中找连接的.
Ami121 2009-02-09
  • 打赏
  • 举报
回复
共享一下我的项目中配置c3p0的配置 供lz参考

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/sodddata?useUnicode=true&characterEncoding=GBK"></property>
<property name="user" value="sodd"></property>
<property name="password" value="sodd123"></property>
<property name="maxPoolSize" value="40"></property>
<property name="minPoolSize" value="1"></property>
<property name="initialPoolSize" value="1"></property>
<property name="maxIdleTime" value="20"></property>
</bean>


initialPoolSize:
Number of Connections a pool will try to acquire upon startup. Should be between minPoolSize and maxPoolSize
连接池初始化时获取的链接数,介于minPoolSize和maxPoolSize之间
minPoolSize:
Minimum number of Connections a pool will maintain at any given time.
最小链接数
maxPoolSize:
Maximum number of Connections a pool will maintain at any given time.
最大连接数
acquireIncrement:
Determines how many connections at a time c3p0 will try to acquire when the pool is exhausted.
在当前连接数耗尽的时候,一次获取的新的连接数
maxIdleTime:
Seconds a Connection can remain pooled but unused before being discarded. Zero means idle connections never expire.
最大空闲的时间,单位是秒,无用的链接再过时后会被回收
sjqzone 2009-02-09
  • 打赏
  • 举报
回复
An attempt by a client to checkout a Connection has timed out.
连接超时了,连接的等待时间设置长点。
herowzz 2009-02-09
  • 打赏
  • 举报
回复
数据库没连上,换个数据库试试
gzbtiantian 2009-02-09
  • 打赏
  • 举报
回复
An attempt by a client to checkout a Connection has timed out. 连接超时。 数据库连接不上,
tomcat和数据库是在一台机器上吗? admin用户让连接吗? 和你的配置文件没关系。
加载更多回复(2)

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧