java idleconnectiontestperiod和maxidletime的区别

如题所述

楼主描述正是MySQL8小时问题,这个问题还是比较容易解决的。
楼主用的连接池是C3P0吗?这里我以C3P0连接池为例来说明问题原因和解决方法。
问题原因:MySQL默认是自动关闭空闲超过8小时的连接,而C3P0并不知道该connection已经失效,如果这时有Client请求connection,C3P0将该失效的Connection提供给Client,将会造成异常。重启Tomcat操作会使C3P0重新建立和数据库的连接池,且池内的连接都是有效的连接。
解决方法:c3p0要在8小时内关闭不使用的连接。这需要修改其中的一些配置参数,主要是maxIdleTime和idleConnectionTestPeriod。这两个参数的值要小于28800秒。
建议配置如下:
<!-- 每次都验证连接是否可用 -->
<property name="hibernate.c3p0.validate">true</property>
<!-- 检查连接池中所有空闲连接的间隔时间,单位为秒(要注意的是MySQL的自动关闭空闲超过8小时连接的机制) -->
<property name="hibernate.c3p0.idle_test_period">18000</property>
<!-- 连接的最大空闲时间,25000秒内未使用则连接被丢弃。单位为秒(要注意的是MySQL的自动关闭空闲超过8小时连接的机制) -->
<property name="hibernate.c3p0.timeout">25000</property>

附上在 hibernate中配置c3p0的关键字。

c3p0.acquireIncrement hibernate.c3p0.acquire_increment
c3p0.idleConnectionTestPeriod hibernate.c3p0.idle_test_period
c3p0.maxIdleTime hibernate.c3p0.timeout
c3p0.maxPoolSize hibernate.c3p0.max_size
c3p0.maxStatements hibernate.c3p0.max_statements
c3p0.minPoolSize hibernate.c3p0.min_size
温馨提示:内容为网友见解,仅供参考
无其他回答

c3p0配置 initialPoolSize 和minPoolSize 可以设为0吗?设0有坏处吗...
可以,但最好不要这样,你的服务器没有那么好,数量过多的时候会暴掉,还不如老老实实的限制一下数量 一般情况下 <!-- 最大连接数 --> <property name="hibernate.c3p0.max_size">20<\/property> <!-- 最小连接数 --> <property name="hibernate.c3p0.min_size">5<\/property> ...

mysql maxIdleTime 可以设置1秒吗?
maxIdleTime 1秒太小了,建议60 maxStatements设为100,maxStatementsPerConnection可以不设 当然这是一般设置,具体还是要根据你的系统数据访问情况进行优化的

数据库的连接和数据池的配置
c3p0.acquireIncrement=3 增长数为3 c3p0.initialPoolSize=3 初始池大小为3 c3p0.idleConnectionTestPeriod=900 测试连接期为900秒 c3p0.minPoolSize=2 最小池大小为2 c3p0.maxPoolSize=50 最大为50 c3p0.maxStatements=100 最大状态为100 c3p0.numHelperThreads=10 支持的线程数为10 c3p0.maxIdleTim...

Jedis连接池配置参数
minEvictableIdleTimeMillis:表示一个对象至少停留在idle状态的最短时间,然后才能被idle object evitor扫描并驱逐;这一项只有在timeBetweenEvictionRunsMillis大于0时才有意义;softMinEvictableIdleTimeMillis:在minEvictableIdleTimeMillis基础上,加入了至少minIdle个对象已经在pool里面了。如果为-1,evicted不...

JAVA怎么通过SSH隧道连接数据库查询
0,不检查 --> <property name="idleConnectionTestPeriod" value="30"\/> <!--当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出 SQLException,如设为0则无限期等待。单位毫秒。Default: 0 --> <property name="checkoutTimeout" value="50"\/> <\/bean> ...

用ssh框架做了个小项目,用c3p0做连接池,用的是Mysql 5.1.x ,现问题如 ...
c3p0.maxPoolSize = 50 c3p0.initialPoolSize = 1 c3p0.maxIdleTime = 25000 c3p0.acquireIncrement = 1 c3p0.acquireRetryAttempts = 30 c3p0.acquireRetryDelay = 1000 c3p0.testConnectionOnCheckin = true c3p0.automaticTestTable = t_c3p0 c3p0.idleConnectionTestPeriod = 18000 c3p0.checkoutTime...

如何使用c3p0+spring连接oracle数据库
idleConnectionTestPeriod:隔多少秒检查所有连接池中的空闲连接,默认为0表示不检查;initialPoolSize:初始化时创建的连接数,应在minPoolSize与maxPoolSize之间取值。默认为3;maxIdleTime:最大空闲时间,超过空闲时间的连接将被丢弃。为0或负数则永不丢弃。默认为0;maxPoolSize:连接池中保留的最大...

谁有ssh假死的解决方案啊, 情况是这样的,时间运行3、5天,ssh远程连接就...
只有SSH服务不行?SSH连接不上?给你说几种方法你检测一下 1、检查系统日志和SSH日志,看SSHD服务状态 2、是否有其他端口冲突造成的,或者防火墙之类的 3、更改SSH端口,比如改成3389之类的试试看还假死不 4、写个脚本定期重启下SSHD服务试试看。总之要找到是什么原因造成的假死才能做好相应的处理 ...

怎么输出oracle dept的值在控制台看的
 <property name="maxIdleTime">   <value>${c3p0.maxPoolSize}<\/value>  <\/property>  <!--每60秒检查所有连接池中的空闲连接。Default: 0 -->  <property name="idleConnectionTestPeriod">   <value>${c3p0....

如何在java里获取hibernate连接池最大连接数和当前连接数
<property name="hibernate.c3p0.min_size">1<\/property> <property name="hibernate.c3p0.max_size">50<\/property> <property name="hibernate.c3p0.timeout">1800<\/property> <property name="hibernate.c3p0.max_statements">100<\/property> <property name="hibernate.c3p0.idle_test_period">100...

相似回答