首页 > 未分类 > 让你的C3P0配置更健全

让你的C3P0配置更健全

2016年12月9日

让你的C3P0配置更健全
http://blog.csdn.net/collonn/article/details/5834968

一:先贴上代码:
[xhtml] view plain copy
<!– c3p0数据源及连接池配置 –>
<bean id=”dataSource” class=”com.mchange.v2.c3p0.ComboPooledDataSource” destroy-method=”close”>
<property name=”driverClass” value=”${jdbc.system.driverClassName}”></property>
<property name=”jdbcUrl” value=”${jdbc.system.url}”></property>
<property name=”user” value=”${jdbc.system.username}”></property>
<property name=”password” value=”${jdbc.system.password}”></property>
<!– 最小连接数 –>
<property name=”minPoolSize” value=”5″></property>
<!– 最大连接数 –>
<property name=”maxPoolSize” value=”335″></property>
<!– 初始化连接数 –>
<property name=”initialPoolSize” value=”10″></property>
<!– 连接耗尽后,一次性获取的新连接数 –>
<property name=”acquireIncrement” value=”5″></property>
<!– 连接失败后重复连接次数 –>
<property name=”acquireRetryAttempts” value=”2″></property>
<!– 两次连接间隔时间1000*1毫秒(1秒) –>
<property name=”acquireRetryDelay” value=”1000″></property>
<!– 每60*60秒(1小时),检查连接池中的空闲连接 –>
<property name=”idleConnectionTestPeriod” value=”3600″></property>
<!– 最大空闲时间60*30秒(0.5小时),内不使用则丢弃 –>
<property name=”maxIdleTime” value=”1800″></property>
</bean>
二:进入MySQL,type:

SHOW GLOBAL VARIABLES LIKE ‘%_timeout’;

找到:A: interactive_timeout 28800 (8小时)

B: wait_timeout 28800

解释一下:

A: interactive_timeout:服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。又见wait_timeout

B: wait_timeout:服务器关闭非交互连接之前等待活动的秒数。在线程启动时,根据全局wait_timeout值或全局 interactive_timeout值初始化会话wait_timeout值,取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义),又见interactive_timeout

总结:如此看来,两个变量是共同控制的,那么都必须对他们进行修改了 。继续深入这两个变量wait_timeout的取值范围是 1-2147483(Windows),1-31536000(Linux),interactive_time取值随wait_timeout变动,它们的默认值都是28800

SHOW GLOBAL VARIABLES LIKE ‘%max’;

找到:max_connections 335

三:找到%mysql_home%/my.ini,加入

wait_timeout=10
interactive_timeout=10

注:在my.ini中配置wait_timeout不起作用,则用如下方法

SET GLOBAL wait_timeout=120
SET GLOBAL interactive_timeout = 120
SHOW GLOBAL VARIABLES LIKE ‘%_timeout%’

如果重启mysql,则所有你刚才设置的GLOBAL数据都无效了.

然后重启mysql服务

四:检查并更改C3P0配置选项每60*60秒(1小时),检查连接池中的空闲连接

(1)idleConnectionTestPeriod(秒) 必须 < wait_timeout(秒) ———-很重要的配置

(2)maxIdleTime必须(秒) > wait_timeout(秒)

(3)maxPoolSize必须 < max_connections

五:ok

可以测试一下你的连接,是不是解决了mysql8小时的问题

分类: 未分类 标签:
本文的评论功能被关闭了.