zoukankan      html  css  js  c++  java
  • C3P0 参数配置

    我所使用的 SSM 框架自动整合了 C3P0 连接池,但是怎奈对 C3P0 不大熟悉,绕了不少圈子,在这里把自己的经验分享一下:

    C3P0 连接错误

    An attempt by a client to checkout a Connection has timed out
    根本原因是连接池中连接耗尽或者连接时间设置得太小,所以要避免这一情况的发生。
    我是直接采用 XML 的形式来配置 C3P0 的:

            <!--适当加大maxPoolSize和minPoolSize -->
            <property name="maxPoolSize" value="5000" />
            <property name="minPoolSize" value="10" />
            <!--自动超时回收 Connection,单位s,默认为0 -->
            <property name="unreturnedConnectionTimeout" value="25" />
            <!--配置超时自动断开 Connection,单位s,默认为0 -->
            <property name="maxIdleTimeExcessConnections" value="20" />
            <property name="maxConnectionAge" value="20" />
            <!--设置成0,这样就不会有缓存的 preparedstatement -->
            <property name="maxStatements" value="0" />
            <!--每隔时间段检测一下 Connection-->
            <property name="idleConnectionTestPeriod" value="50" />
            <!--Connection 最大等待时间-->
            <property name="checkoutTimeout" value="5000" />

    C3P0 参数详解

    初始化时创建的连接数,应在minPoolSize与maxPoolSize之间取值。默认为3
    initialPoolSize=20

    接池中保留的最大连接数。默认为15
    maxPoolSize=30
    minPoolSize=20

    当连接池中的连接用完时,C3P0一次性创建新连接的数目 默认 3
    acquireIncrement=10

    定义在从数据库获取新连接失败后重复尝试获取的次数,默认为30
    acquireRetryAttempts=100

    两次连接中间隔时间,单位毫秒,默认为1000
    acquireRetryDelay=1000

    连接关闭时默认将所有未提交的操作回滚。默认为false
    autoCommitOnClose=false

    获取连接失败将会引起所有等待获取连接的线程抛出异常。但是数据源仍有效保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试获取连接失败后该数据源将申明已断开并永久关闭。默认为false
    breakAfterAcquireFailure=false

    当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出 SQLException,如设为0则无限期等待。单位毫秒,默认为0。时间设置过小时会出现连接超时.这样会抛出异常,设置时间时自己小心.按照实际情况设置适当的值.
    checkoutTimeout=20000

    最大空闲时间,超过空闲时间的连接将被丢弃。为0或负数则永不丢弃。默认为0
    maxIdleTime=60

    checkoutTimeout表示连接对象多长时间应该被销毁, 注意,是”应该“,但是谁来销毁它呢,需要一个线程按照idleConnectionTestPeriod设定的时间间隔去自动校验这些链接对象并销毁timeout的每60秒检查连接池中所有的空闲连接。Default: 0
    idleConnectionTestPeriod=60

    C3P0是异步操作的,缓慢的JDBC操作通过帮助进程完成。扩展这些操作可以有效的提升性能通过多线程实现多个操作同时被执行。默认为3
    numHelperThreads=3

    用户修改系统配置参数执行前最多等待的秒数。默认为300
    propertyCycle=300

    c3p0在同时关闭statement和connection的时候,或者关闭他们之间的时间很短的时候,有时候connection并没有被关闭,因为有些preparedstatement还在被cached住。这样就会有很多connection并没有真正的被关闭,连接池的连接都给耗尽了,就会产生异常。解决的方案就是把缓存关闭,也就是把c3p0.max_statements 设置成0,这样就不会有缓存的preparedstatement
    maxStatements=0

  • 相关阅读:
    Firefox浏览器安装 Disable Javascript插件
    Web常见漏洞及修复建议
    查询公网出口IP
    jQuery jsonp跨域请求--转载自https://www.cnblogs.com/chiangchou/p/jsonp.html
    理解闭包 js回收机制--转载https://www.cnblogs.com/wangyingblog/p/5569745.html
    全面理解Javascript闭包和闭包的几种写法及用途--转载自https://www.cnblogs.com/yunfeifei/p/4019504.html
    什么是闭包?闭包的优缺点?--转载自https://www.cnblogs.com/cxying93/p/6103375.html
    JavaScript局部变量和全局变量的理解--转载自https://www.cnblogs.com/eric-qin/p/4166552.html
    好文收藏
    SQL In和Like 参数化
  • 原文地址:https://www.cnblogs.com/Sherlock-J/p/12925988.html
Copyright © 2011-2022 走看看