废话不多说先上dataSource的配置<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> 
<property name="driverClass"><value>${jdbc.driverClassName}</value></property> 
<property name="jdbcUrl"><value>${jdbc.url}</value></property> 
<property name="user"><value>${jdbc.username}</value></property> 
<property name="password"><value>${jdbc.password}</value></property>
<property name="acquireIncrement"><value>5</value></property>
<property name="autoCommitOnClose"><value>false</value></property>
<property name="forceIgnoreUnresolvedTransactions"><value>false</value></property>
<property name="initialPoolSize"><value>5</value></property>
<property name="minPoolSize"><value>5</value></property>
<property name="maxPoolSize"><value>50</value></property>
<property name="maxStatements"><value>0</value></property>
<property name="maxStatementsPerConnection"><value>100</value></property>
<property name="maxIdleTime"><value>60</value></property>
<property name="idleConnectionTestPeriod"><value>60</value></property>
<property name="testConnectionOnCheckout"><value>false</value></property>
<property name="numHelperThreads"><value>3</value></property>
    </bean>
目前这个配置跑系统没有问题的,现在这个系统可能有几千人要访问,可能出现的超过最大连接数等等问题,不知道这些参数合理不合理
以前使用的dhcp作为数据源的配置,时不时的会出现数据库断开连接。现在改为c3p0,配置了半天,总算现在能把系统跑上了。各位看到帖子麻烦给点意见,不胜感激。Springc3p0数据库Java连接数

解决方案 »

  1.   


    顺带问一下  假如我设置50,但实际上有51人同时点,也会有一个先后顺序,那最后的那个会如何?数据库会因此出现什么状况呢?假如页面卡一点,50人登录系统,都未释放连接,连接数就算被用完了吧这个时候的acquireIncrement会发挥作用创建5个连接么、?
    这个检查周期是多长啊
    比如我登录要8秒,50人秒杀,8秒内都未释放连接,这个时候的acquireIncrement会在这8秒大概创建多少连接呢,会把数据库爆掉不?十分感谢,楼上迈克尔的回复,能继续帮忙看下不
      

  2.   

    根据连接池管理规则,为最后一个人服务的线程(假定也叫他T51)就会被连接池锁住,也就是等待有其它线程先服务完释放数据库连接回池中,再将释放连接又的分配给T51线程。
    当然这里会有超时机制,比如连接池让T51等了1分钟,也没看到有归还数据库连接的,那么就会抛出异常,向T51表示:对不起,帮不到你了。
    数据库才不会被你爆掉呢,数据库最小气了,如果你给数据库只配置了50个可用会话,第51个连接请求过来,数据库直接返回:“没有了,滚一边儿去”。
      

  3.   


    有时间求解释下  “连接数就算被用完了吧这个时候的acquireIncrement会发挥作用创建5个连接么、?”
    3Q  
      

  4.   


    com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failureThe last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
            at sun.reflect.GeneratedConstructorAccessor11.newInstance(Unknown Source)
            at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
            at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
            at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
            at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074)
            at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2209)
            at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:776)
            at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
            at sun.reflect.GeneratedConstructorAccessor12.newInstance(Unknown Source)
            at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
            at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
            at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
            at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:352)
            at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:284)
            at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:134)
            at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
            at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)
            at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)
            at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)
            at com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32)
            at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)
            at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
    Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failureThe last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
      

  5.   


            <property name="preferredTestQuery" value="SELECT ID FROM COMPANY where ID=1" />
         <property name="idleConnectionTestPeriod" value="18000" />
         <property name="testConnectionOnCheckout" value="true" />
    自己写了一个
      

  6.   

    <property name="testConnectionOnCheckout" value="true" />
    这行就是用来自动测试的,你原来的配置是false