天天看点

Hibernate连接池C3PO配置文件——c3p0-config.xml配置文件

配置文件

  • 名称必须为c3p0-config.xml,否则找不到;<default-config>也不能缺
  • 标签名称
    <c3p0-config>
        <default-config>
            具体配置内容
        </default-config>
    </c3p0-config>
               

一般按照上述配置即可,如果有多个数据库可以使用标签

sqlite配置参考

<named-config name = "sqlite" >
    <property name="jdbcUrl">jdbc:sqlite:db_save_path</property>
    <property name="driverClass">org.sqlite.JDBC</property>

    <property name="checkoutTimeout">30000</property>
    <property name="idleConnectionTestPeriod">30</property>
    <property name="initialPoolSize">10</property>
    <property name="maxIdleTime">30</property>
    <property name="maxPoolSize">10</property>
    <property name="maxStatements">200</property>
</named-config>
           

sqlite memory mode

上面的配置会把数据库文件保存到db_save_path,如果数据量比较小,也不需要持久化到硬盘上,可以使用sqlite的内存数据库模式,

<property name="jdbcUrl">jdbc:sqlite::memory:</property>
           

其中memory名称不能改变。

此时,数据库在当前数据库连接被关闭后就立刻消失。每个:memory:数据库是不同的数据库,也就是说,用文件名":memory:"打开两个数据库连接将创建两个独立的内在数据库。

如果通过未修饰的":memory"名来指定内存数据库,则这个数据库总是有一个私有的对其他连接不可见的缓存。如果使用URI文件名,则同样的内存数据库可以被两个或多个数据库连接打开。

引用自SQLite剖析(6):临时文件和内存数据库

mysql配置参考

<named-config name = "mysql" >
    <property name="jdbcUrl">jdbc:mysql://ipAddr:Port/dbName</property>
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <property name="user">username</property>
    <property name="password">password</property>

    <property name="checkoutTimeout">30000</property>
    <property name="idleConnectionTestPeriod">30</property>
    <property name="initialPoolSize">10</property>
    <property name="maxIdleTime">30</property>
    <property name="maxPoolSize">100</property>
    <property name="minPoolSize">10</property>
    <property name="maxStatements">200</property>
</named-config>
           

一个完整c3p0的配置 

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <!--连接池名字-->
    <named-config name="mysql">
        <!--数据路连接用户名-->
        <property name="user">root</property>
        <!--数据库密码-->
        <property name="password">123456</property>
        <!--数据库驱动-->
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <!--数据库URL-->
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/regist_web</property>
        <!--上面的是最基本的-->
        <!-- 初始化连接池中的连接数取值应在最小连接数与最大连接数之间默认为3-->
        <property name="initialPoolSize">10</property>
        <!--最大空闲时间60秒内未使用则连接被丢弃若为0则永不丢弃默认值0-->
        <property name="maxIdleTime">60</property>
        <!--连接池中的最大连接数默认15-->
        <property name="maxPoolSize">100</property>
        <!--连接池中保留的最小连接数默认为3-->
        <property name="minPoolSize">10</property>
        <!--当连接池连接耗尽时客户端调用getConnection()后等待获取新连接的时间超时后将抛出SQLException如设为0则无限期等待单位毫秒默认0-->
        <property name="checkoutTimeout">3000</property>
        <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数默认值3-->
        <property name="acquireIncrement">2</property>
        <!--定义在从数据库获取新连接失败后重复尝试的次数默认值30小于等于0表示无限次-->
        <property name="acquireRetryAttempts">0</property>
        <!--重新尝试的时间间隔默认为1000毫秒-->
        <property name="acquireRetryDelay">1000</property>
        <!--关闭连接时是否提交未提交的事务默认为false即关闭连接回滚未提交的事务 -->
        <property name="autoCommitOnClose">false</property>
        <!--c3p0将建一张名为Test的空表并使用其自带的查询语句进行测试如果定义了这个参数那么属性preferredTestQuery将被忽略你不能在这张Test表上进行任何操作它将只供c3p0测试使用默认值null-->
        <property name="automaticTestTable">Test</property>
        <!--如果为false则获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常但是数据源仍有效保留并在下次调用getConnection()的时候继续尝试获取连接如果设为true那么在尝试获取连接失败后该数据源将申明已断开并永久关闭默认false-->
        <property name="breakAfterAcquireFailure">false</property>
        <!--每60秒检查所有连接池中的空闲连接默认值:0不检查-->
        <property name="idleConnectionTestPeriod">60</property>
    </named-config>
</c3p0-config>
           

另外需要引入两个包:

c3p0-0.9.2.1 jar 和 mchange-commons-java-0.2.3.4 jar 

缺少jar包则会报错

参考源于:

https://www.cnblogs.com/cuimiemie/p/6442682.html

继续阅读