定义:

C3P0是一个开源的JDBC连接池,目前使用它的开源项目有Hibernate,Spring等。

数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。获取一个连接,系统要在背后做很多消耗资源的事情,大多时候,创建连接的时间比执行sql语句的时间还要长。用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长。

使用方法:

1.导入jar包:c3p0和mysql

2.配置xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <c3p0-config>
  4. <default-config>
  5.    <!--mysql数据库连接的各项参数-->
  6. <property name="driverClass">com.mysql.jdbc.Driver</property>
  7. <property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb?characterEncoding=GBK</property>
  8. <property name="user">root</property>
  9. <property name="password"></property>
  10. <!--配置数据库连接池的最小链接数、最大连接数、初始连接数-->
  11. <property name="maxPoolSize">15</property>
  12. <property name="minPoolSize">5</property>
  13. <property name="initialSize">5</property>
  14. </default-config>
  15. </c3p0-config>

3.写代码实现

实例:http://www.cnblogs.com/hq233/p/6642807.html

注:c3p0-config.xml模板详解

  1. <c3p0-config>
  2. <default-config>
  3. <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
  4. <property name="acquireIncrement">3</property>
  5.  
  6. <!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 -->
  7. <property name="acquireRetryAttempts">30</property>
  8.  
  9. <!--两次连接中间隔时间,单位毫秒。Default: 1000 -->
  10. <property name="acquireRetryDelay">1000</property>
  11.  
  12. <!--连接关闭时默认将所有未提交的操作回滚。Default: false -->
  13. <property name="autoCommitOnClose">false</property>
  14.  
  15. <!--c3p0将建一张名为Test的空表,并使用其自带的查询语句进行测试。如果定义了这个参数那么
  16. 属性preferredTestQuery将被忽略。你不能在这张Test表上进行任何操作,它将只供c3p0测试
  17. 使用。Default: null-->
  18. <property name="automaticTestTable">Test</property>
  19.  
  20. <!--获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效
  21. 保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试
  22. 获取连接失败后该数据源将申明已断开并永久关闭。Default: false-->
  23. <property name="breakAfterAcquireFailure">false</property>
  24.  
  25. <!--当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出
  26. SQLException,如设为0则无限期等待。单位毫秒。Default: 0 -->
  27. <property name="checkoutTimeout">100</property>
  28.  
  29. <!--通过实现ConnectionTester或QueryConnectionTester的类来测试连接。类名需制定全路径。
  30. Default: com.mchange.v2.c3p0.impl.DefaultConnectionTester-->
  31. <property name="connectionTesterClassName"></property>
  32.  
  33. <!--指定c3p0 libraries的路径,如果(通常都是这样)在本地即可获得那么无需设置,默认null即可
  34. Default: null-->
  35. <property name="factoryClassLocation">null</property>
  36.  
  37. <!--Strongly disrecommended. Setting this to true may lead to subtle and bizarre bugs.
  38. (文档原文)作者强烈建议不使用的一个属性-->
  39. <property name="forceIgnoreUnresolvedTransactions">false</property>
  40.  
  41. <!--每60秒检查所有连接池中的空闲连接。Default: 0 -->
  42. <property name="idleConnectionTestPeriod">60</property>
  43.  
  44. <!--初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
  45. <property name="initialPoolSize">3</property>
  46.  
  47. <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
  48. <property name="maxIdleTime">60</property>
  49.  
  50. <!--连接池中保留的最大连接数。Default: 15 -->
  51. <property name="maxPoolSize">15</property>
  52.  
  53. <!--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements
  54. 属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。
  55. 如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0-->
  56. <property name="maxStatements">100</property>
  57.  
  58. <!--maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default: 0 -->
  59. <property name="maxStatementsPerConnection"></property>
  60.  
  61. <!--c3p0是异步操作的,缓慢的JDBC操作通过帮助进程完成。扩展这些操作可以有效的提升性能
  62. 通过多线程实现多个操作同时被执行。Default: 3-->
  63. <property name="numHelperThreads">3</property>
  64.  
  65. <!--当用户调用getConnection()时使root用户成为去获取连接的用户。主要用于连接池连接非c3p0
  66. 的数据源时。Default: null-->
  67. <property name="overrideDefaultUser">root</property>
  68.  
  69. <!--与overrideDefaultUser参数对应使用的一个参数。Default: null-->
  70. <property name="overrideDefaultPassword">password</property>
  71.  
  72. <!--密码。Default: null-->
  73. <property name="password"></property>
  74.  
  75. <!--定义所有连接测试都执行的测试语句。在使用连接测试的情况下这个一显著提高测试速度。注意:
  76. 测试的表必须在初始数据源的时候就存在。Default: null-->
  77. <property name="preferredTestQuery">select id from test where id=1</property>
  78.  
  79. <!--用户修改系统配置参数执行前最多等待300秒。Default: 300 -->
  80. <property name="propertyCycle">300</property>
  81.  
  82. <!--因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的
  83. 时候都将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable
  84. 等方法来提升连接测试的性能。Default: false -->
  85. <property name="testConnectionOnCheckout">false</property>
  86.  
  87. <!--如果设为true那么在取得连接的同时将校验连接的有效性。Default: false -->
  88. <property name="testConnectionOnCheckin">true</property>
  89.  
  90. <!--用户名。Default: null-->
  91. <property name="user">root</property>
  92.  
  93. <!--早期的c3p0版本对JDBC接口采用动态反射代理。在早期版本用途广泛的情况下这个参数
  94. 允许用户恢复到动态反射代理以解决不稳定的故障。最新的非反射代理更快并且已经开始
  95. 广泛的被使用,所以这个参数未必有用。现在原先的动态反射与新的非反射代理同时受到
  96. 支持,但今后可能的版本可能不支持动态反射代理。Default: false-->
  97. <property name="usesTraditionalReflectiveProxies">false</property>
  98.  
  99. <property name="automaticTestTable">con_test</property>
  100. <property name="checkoutTimeout">30000</property>
  101. <property name="idleConnectionTestPeriod">30</property>
  102. <property name="initialPoolSize">10</property>
  103. <property name="maxIdleTime">30</property>
  104. <property name="maxPoolSize">25</property>
  105. <property name="minPoolSize">10</property>
  106. <property name="maxStatements">0</property>
  107. <user-overrides user="swaldman">
  108. </user-overrides>
  109. </default-config>
  110. <named-config name="dumbTestConfig">
  111. <property name="maxStatements">200</property>
  112. <user-overrides user="poop">
  113. <property name="maxStatements">300</property>
  114. </user-overrides>
  115. </named-config>
  116. </c3p0-config>

C3P0使用详解的更多相关文章

  1. c3p0配置详解

    数据库连接池C3P0框架是个非常优异的开源jar,高性能的管理着数据源,这里只讨论程序本身负责数据源,不讨论容器管理. 一.实现方式: C3P0有三种方式实现: 1.自己动手写代码,实现数据源 例如: ...

  2. DBCP|C3P0参数详解

    1.<!-- 数据源1 --> 2. <bean id="dataSource" 3. class="org.apache.commons.dbcp.B ...

  3. c3p0配置详解<转贴>

    <c3p0-config> <default-config> <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数.Default: 3 --> < ...

  4. c3p0参数详解

    <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数.Default: 3 --> <property name="acquireIncrement"& ...

  5. C3P0连接池详解及配置

    C3P0连接池详解及配置 本人使用的C3P0的jar包是:c3p0-0.9.1.jar <bean id = "dataSource" class = "com.m ...

  6. 源码详解系列(五) ------ C3P0的使用和分析(包括JNDI)

    简介 c3p0是用于创建和管理连接,利用"池"的方式复用连接减少资源开销,和其他数据源一样,也具有连接数控制.连接可靠性测试.连接泄露控制.缓存语句等功能.目前,hibernate ...

  7. 详解C3P0(数据库连接池)

    详解C3P0(数据库连接池) 快速索引 一.基本定义 二.使用C3P0(数据库连接池)的必要性 1.JDBC传统模式开发存在的主要问题 三.数据库连接池的详细说明 四.使用连接池的明显优势 1.资源的 ...

  8. Spring 3.x jar 包详解 与 依赖关系

    以下的内容我会持续更新(当然是我有新发现的时候); 以下内容是我在网上搜索.整理.修改的而成的内容.由于很多内容都是转载了,无法追溯到源头,因此无法一一对原作者进行道谢. 这几天,我查阅大量的官方的文 ...

  9. Tomcat 6 JNDI数据源详解

    数据库连接池这个概念应该都不陌生,在Java中连接池也就是数据库的连接池,它是一种采用连接复用的思想避免多次连接造成资源的浪费机制. 最常见的连接池就是DBCP和C30P了,在tomcat中默认使用的 ...

随机推荐

  1. OpenERP学习过程1

    系统为Win7 32位,下载并安装OpenERP: 1. 下载地址http://nightly.odoo.com/7.0/nightly/exe/ 2. 双击开始安装,由于选择的是all-in-one ...

  2. 关于mysql主从复制的概述与分类

    一.概述: 按照MySQL的同步复制特点,大体上可以分为三种类别: 1.异步复制: 2.半同步复制: 3.完全同步的复制: -------------------------------------- ...

  3. 推荐系统第2周--itemCF和userCF

    推荐系统分类 基于应用领域分类:电子商务推荐,社交好友推荐,搜索引擎推荐,信息内容推荐基于设计思想:基于协同过滤的推荐,基于内容的推荐,基于知识的推荐,混合推荐基于使用何种数据:基于用户行为数据的推荐 ...

  4. boost atomic

    文档: http://www.boost.org/doc/libs/1_53_0/doc/html/atomic.html Presenting Boost.Atomic Boost.Atomic i ...

  5. PHP基础学习代码案例

    <?php print 'hello world ! '; echo '<br/>'; ?> <?php $number="16"; $number2 ...

  6. Django框架之模板语法(重要!)

    一.什么是模板? 只要是在html里面有模板语法就不是html文件了,这样的文件就叫做模板. 二.模板语法分类 1.模板语法之变量:语法为 {{ }}: 在 Django 模板中遍历复杂数据结构的关键 ...

  7. tomcat 启动报错(tomcat org.apache.catalina.core.StandardContext startInternal)

    转载:https://blog.csdn.net/chenlong316048157/article/details/18698611 org.apache.catalina.core.Standar ...

  8. 在vps主机上***

    一.安装 Shadowsocks服务端: 1.下载软件包 yum install python-setuptools && easy_install pip pip install s ...

  9. solr 利用cul或solr界面单值更新

    本文主要是指利用solr界面或cul的更新solr的值.如果需要代码中单值更新请参考黎明露珠的博客链接:http://www.cnblogs.com/limingluzhu/p/5535314.htm ...

  10. 199. Binary Tree Right Side View -----层序遍历

    Given a binary tree, imagine yourself standing on the right side of it, return the values of the nod ...