关于Spring配置c3p0的配置问题

Zh_java_2009 2013-06-26 04:08:38
废话不多说先上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,配置了半天,总算现在能把系统跑上了。

各位看到帖子麻烦给点意见,不胜感激。
...全文
486 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
MiceRice 2013-07-01
  • 打赏
  • 举报
回复
不一定是问题,有可能是网络引起的。 这个会影响你的程序么?应该不至于吧? 检查下数据库连接池是否配置了“自动测试”,有的话,它会检查连接是否正常,断开的会自动重连。
Zh_java_2009 2013-07-01
  • 打赏
  • 举报
回复
我现在使用的就是最上面发的那个配置
Zh_java_2009 2013-07-01
  • 打赏
  • 举报
回复
引用 11 楼 ldh911 的回复:
如有其它疑问,直接空间留言即可。我上论坛时间不定,但看到了就会回复的。
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The 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 failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
MiceRice 2013-07-01
  • 打赏
  • 举报
回复
<property name="testConnectionOnCheckout" value="true" /> 这行就是用来自动测试的,你原来的配置是false
Zh_java_2009 2013-07-01
  • 打赏
  • 举报
回复
配置就在这个帖子的最上面,好像没有
Zh_java_2009 2013-07-01
  • 打赏
  • 举报
回复
引用 14 楼 ldh911 的回复:
不一定是问题,有可能是网络引起的。 这个会影响你的程序么?应该不至于吧? 检查下数据库连接池是否配置了“自动测试”,有的话,它会检查连接是否正常,断开的会自动重连。
<property name="preferredTestQuery" value="SELECT ID FROM COMPANY where ID=1" /> <property name="idleConnectionTestPeriod" value="18000" /> <property name="testConnectionOnCheckout" value="true" /> 自己写了一个
神探狄仁杰 2013-06-28
  • 打赏
  • 举报
回复
数据库连接池的优化问题。 看你的情况,应该还是与业务处理速度有直接关系。
MiceRice 2013-06-28
  • 打赏
  • 举报
回复
根据连接池管理规则,为最后一个人服务的线程(假定也叫他T51)就会被连接池锁住,也就是等待有其它线程先服务完释放数据库连接回池中,再将释放连接又的分配给T51线程。 当然这里会有超时机制,比如连接池让T51等了1分钟,也没看到有归还数据库连接的,那么就会抛出异常,向T51表示:对不起,帮不到你了。 数据库才不会被你爆掉呢,数据库最小气了,如果你给数据库只配置了50个可用会话,第51个连接请求过来,数据库直接返回:“没有了,滚一边儿去”。
小丑哥_V5 2013-06-28
  • 打赏
  • 举报
回复
Zh_java_2009 2013-06-28
  • 打赏
  • 举报
回复
引用 3 楼 ldh911 的回复:
你的问题不太好回答,几千人访问,也许50个数据库连接就够了,也许500个数据库连接才够。 要取决于: 1、操作频度,是大家每五分钟也就点1下鼠标(读书网站),还是全部集中在某一秒狂点(秒杀竞价系统); 2、操作类型,是以简单操作为主,还是数据分析这种复杂业务。 所以,施主随缘吧。
顺带问一下 假如我设置50,但实际上有51人同时点,也会有一个先后顺序,那最后的那个会如何?数据库会因此出现什么状况呢?假如页面卡一点,50人登录系统,都未释放连接,连接数就算被用完了吧这个时候的acquireIncrement会发挥作用创建5个连接么、? 这个检查周期是多长啊 比如我登录要8秒,50人秒杀,8秒内都未释放连接,这个时候的acquireIncrement会在这8秒大概创建多少连接呢,会把数据库爆掉不? 十分感谢,楼上迈克尔的回复,能继续帮忙看下不
MiceRice 2013-06-28
  • 打赏
  • 举报
回复
如有其它疑问,直接空间留言即可。我上论坛时间不定,但看到了就会回复的。
MiceRice 2013-06-28
  • 打赏
  • 举报
回复
引用 8 楼 Zh_java_2009 的回复:
哈哈 够形象
发现漏了你一个问题。 关于自动增长的,这个是立即有效的。 也就是T51过来时,如果连接池发现还可以继续增长(没有达到最大连接上限),就会立即向数据库发起新连接请求,并分配给T51
Zh_java_2009 2013-06-28
  • 打赏
  • 举报
回复
引用 6 楼 ldh911 的回复:
根据连接池管理规则,为最后一个人服务的线程(假定也叫他T51)就会被连接池锁住,也就是等待有其它线程先服务完释放数据库连接回池中,再将释放连接又的分配给T51线程。 当然这里会有超时机制,比如连接池让T51等了1分钟,也没看到有归还数据库连接的,那么就会抛出异常,向T51表示:对不起,帮不到你了。 数据库才不会被你爆掉呢,数据库最小气了,如果你给数据库只配置了50个可用会话,第51个连接请求过来,数据库直接返回:“没有了,滚一边儿去”。
有时间求解释下 “连接数就算被用完了吧这个时候的acquireIncrement会发挥作用创建5个连接么、?” 3Q
Zh_java_2009 2013-06-28
  • 打赏
  • 举报
回复
引用 6 楼 ldh911 的回复:
根据连接池管理规则,为最后一个人服务的线程(假定也叫他T51)就会被连接池锁住,也就是等待有其它线程先服务完释放数据库连接回池中,再将释放连接又的分配给T51线程。 当然这里会有超时机制,比如连接池让T51等了1分钟,也没看到有归还数据库连接的,那么就会抛出异常,向T51表示:对不起,帮不到你了。 数据库才不会被你爆掉呢,数据库最小气了,如果你给数据库只配置了50个可用会话,第51个连接请求过来,数据库直接返回:“没有了,滚一边儿去”。
哈哈 够形象
Zh_java_2009 2013-06-27
  • 打赏
  • 举报
回复
一天了,怎么都木人啊
MiceRice 2013-06-27
  • 打赏
  • 举报
回复
你的问题不太好回答,几千人访问,也许50个数据库连接就够了,也许500个数据库连接才够。 要取决于: 1、操作频度,是大家每五分钟也就点1下鼠标(读书网站),还是全部集中在某一秒狂点(秒杀竞价系统); 2、操作类型,是以简单操作为主,还是数据分析这种复杂业务。 所以,施主随缘吧。
Zh_java_2009 2013-06-27
  • 打赏
  • 举报
回复
还是0回复啊。。真蛋疼

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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