这个错误是什么原因导致的啊,在有的机器上能正常运行,在有的机器上报如下错误:
上网查找说去掉checktimeout就能解决,实践之后还是不行。java.sql.SQLException: An attempt by a client to checkout a Connection has timed out.
at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:106)
at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:65)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:350)
at com.mchange.v2.c3p0.PoolBackedDataSource.getConnection(PoolBackedDataSource.java:116)
at com.mchange.v2.c3p0.ComboPooledDataSource.getConnection(ComboPooledDataSource.java:591)
at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:80)
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:800)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:726)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1059)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:363)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:226)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:147)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:269)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:320)
at org.springframework.web.context.support.AbstractRefreshableWebApplicationContext.refresh(AbstractRefreshableWebApplicationContext.java:134)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:246)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:184)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3972)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4467)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:519)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Caused by: com.mchange.v2.resourcepool.TimeoutException: internal -- timeout at awaitAvailable()
at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1001)
at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:293)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:348)
... 33 more

解决方案 »

  1.   

    数据库联接时超时,可能是sql语句性能太差
      

  2.   

    checkoutTimeout的意义是
    <!--当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出
         SQLException,如设为0则无限期等待。单位毫秒。Default: 0 -->把配置去掉或者设置成0,是表示无限期等待,但是你的问题的根本是连接池里面已经没有活动连接了.
    你应该先检查,哪些程序使用完连接之后没有正常关闭.
      

  3.   

    数据库联接时超时,可能是sql语句性能太差
      

  4.   

    查错误一般只要看第一句就知道了,An attempt by a client to checkout a Connection has timed out.连接超时
      

  5.   

      数据库联接时超时,可以将time out 的时间设置为永远不超时看看;
      

  6.   

    把你配置的 c3p0.properties 或者是 c3p0 配置贴出来看一下(如果涉及正式数据库服务器 IP、用户名和密码请先隐去)。
      

  7.   

    这是applicationContext.xml中的
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="driverClass" value="${jdbc.driverClassName}" />
            <property name="jdbcUrl" value="${jdbc.url}" />
            <property name="user" value="${jdbc.username}" />
            <property name="password" value="${jdbc.password}" />
            <property name="autoCommitOnClose" value="true"/>
            <property name="checkoutTimeout" value="${cpool.checkoutTimeout}"/>
            <property name="initialPoolSize" value="${cpool.initialPoolSize}"/>
            <property name="minPoolSize" value="${cpool.minPoolSize}"/>
            <property name="maxPoolSize" value="${cpool.maxPoolSize}"/>
            <property name="maxIdleTime" value="${cpool.maxIdleTime}"/>
            <property name="acquireIncrement" value="${cpool.acquireIncrement}"/>
            <property name="idleConnectionTestPeriod" value="${cpool.idleConnectionTestPeriod}"/>
            <property name="acquireRetryAttempts" value="${cpool.acquireRetryAttempts}"/>
        </bean>对应着jdbc.properties文件中的:
    cpool.checkoutTimeout=5000
    #初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3
    cpool.initialPoolSize=1
    #连接池中保留的最小连接数
    cpool.minPoolSize=1
    #连接池中保留的最大连接数。Default: 15
    cpool.maxPoolSize=40
    #最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0
    cpool.maxIdleTime=25200
    #当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3
    cpool.acquireIncrement=5
    #每60秒检查所有连接池中的空闲连接。Default: 0 
    cpool.idleConnectionTestPeriod=60
    #定义在从数据库获取新连接失败后重复尝试的次数。Default: 30
    cpool.acquireRetryAttempts=30
      

  8.   

    连接池设置大点,或者看下sql语句
      

  9.   

    把你的ojdbc5.jar换成ojdbc14.jar试试,成功了告诉我们,失败也告诉我们