数据库连接

现在常用的开源数据连接池主要有c3p0、dbcp和proxool三种:

一、spring配置文件引入

      <!-- 配置dbcp数据源 --><bean id="dataSource2" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource"><property name="driverClassName" value="${jdbc.driverClassName}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/><!-- 池启动时创建的连接数量 --><property name="initialSize" value="5"/><!-- 同一时间可以从池分配的最多连接数量。设置为0时表示无限制。 --><property name="maxActive" value="30"/><!-- 池里不会被释放的最多空闲连接数量。设置为0时表示无限制。 --><property name="maxIdle" value="20"/><!-- 在不新建连接的条件下,池中保持空闲的最少连接数。 --><property name="minIdle" value="3"/><!-- 设置自动回收超时连接 -->  <property name="removeAbandoned" value="true" /><!-- 自动回收超时时间(以秒数为单位) -->  <property name="removeAbandonedTimeout" value="200"/><!-- 设置在自动回收超时连接的时候打印连接的超时错误  --> <property name="logAbandoned" value="true"/><!-- 等待超时以毫秒为单位,在抛出异常之前,池等待连接被回收的最长时间(当没有可用连接时)。设置为-1表示无限等待。  -->  <property name="maxWait" value="100"/>  </bean><!-- 配置c3p0数据源 --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"><property name="jdbcUrl" value="${jdbc.url}" /><property name="driverClass" value="${jdbc.driverClassName}" /><property name="user" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /><!--连接池中保留的最大连接数。Default: 15 --><property name="maxPoolSize" value="100" /><!--连接池中保留的最小连接数。--><property name="minPoolSize" value="1" /><!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3 --><property name="initialPoolSize" value="10" /><!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 --><property name="maxIdleTime" value="30" /><!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 --><property name="acquireIncrement" value="5" /><!--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0--><property name="maxStatements" value="0" /><!--每60秒检查所有连接池中的空闲连接。Default: 0 --><property name="idleConnectionTestPeriod" value="60" /><!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 --><property name="acquireRetryAttempts" value="30" /><!--获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试获取连接失败后该数据源将申明已断开并永久关闭。Default: false--><property name="breakAfterAcquireFailure" value="true" /><!--因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的时候都将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable等方法来提升连接测试的性能。Default: false --><property name="testConnectionOnCheckout"  value="false" />        </bean>

二、介绍

1、c3p0

C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。

2、dbcp简介:   
DBCP(DataBase connection pool),数据库连接池。是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。单独使用dbcp需要3个包:common-dbcp.jar,common-pool.jar,common-collections.jar由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。

三、c3p0与dbcp区别:

dbcp没有自动的去回收空闲连接的功能  c3p0有自动回收空闲连接功能  
两者主要是对数据连接的处理方式不同!C3P0提供最大空闲时间,DBCP提供最大连接数。

前者当连接超过最大空闲连接时间时,当前连接就会被断掉。DBCP当连接数超过最大连接数时,所有连接都会被断开。

dbcp它的原理是维护多个连接对象Connection,在web项目要连接数据库时直接使用它维护的对象进行连接,省去每次都要创建连接对象的麻烦。提高效率和减少内存使用。

s3p0可以自动回收连接,dbcp需要自己手动释放资源返回。不过dbcp效率比较高。

c3p0和dbcp的区别
  c3p0 dbcp
对数据连接的处理方式 提供最大空闲时间 提供最大连接数
什么时候连接挂断 当连接超过最大空闲连接时间时 当连接数超过最大连接数时
连接资源是否释放 自动回收连接 需要自己手动释放资源
效率   效率比较高()
原理  

维护多个连接对象Connection,在web项目要连接数据

库时直接使用它维护的对象进行连接,省去每次都要创

建连接对象的麻烦。提高效率和减少内存使用

推荐使用 hibernate开发 spring开发

c3p0和dbcp的使用和区别相关推荐

  1. c3p0连接池与dbcp连接池的区别

    c3p0连接池与dbcp连接池的区别: c3p0有自动回收空闲连接的功能: dbcp没有自动回收空闲连接的功能: c3p0提供最大空闲时间,超时则断开当前连接: dbcp提供最大连接数,超过最大连接数 ...

  2. c3p0与dbcp的异同

    1.定义 C3P0:C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展.目前使用它的开源项目有Hibernate,Spring等. dbcp : ...

  3. java dbcp c3p0_c3p0与dbcp的作用与区别,及使用!

    一:c3p0简介及作用: c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展.目前使用它开源项目有Hibernate,Spring.是一个后缀名 ...

  4. c3p0、dbcp、druid三大连接池对比

    转: c3p0.dbcp.druid三大连接池对比 转载于:https://www.cnblogs.com/littlelazy/p/10480552.html

  5. c3p0,DBCP,Druid(德鲁伊)数据库连接池

    c3p0,DBCP,Druid(德鲁伊)数据库连接池 每博一文案 佛说:前世 500 次的回眸,才换来今生的一次擦肩而过. 人与人之间的缘分,真的无需强求,并不是所有的感情都能天长地久,正如<越 ...

  6. 配置Spring数据源c3p0与dbcp

    2019独角兽企业重金招聘Python工程师标准>>> 不管通过何种持久化技术,都必须通过数据连接访问数据库,在Spring中,数据连接是通过数据源获得的.在以往的应用中,数据源一般 ...

  7. C3P0 与 DBCP 数据库连接池使用和比较

    博主声明: 转载请在开头附加本文链接及作者信息,并标记为转载.本文由博主 威威喵 原创,请多支持与指教. 本文首发于此   博主:威威喵  |  博客主页:https://blog.csdn.net/ ...

  8. 数据库连接池dbcp和c3po的区别

    1 DBCP    DBCP是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件. 2.C3P0 是一个开放源代码的JDBC连接池,它在lib目录中与Hibernat ...

  9. 1.DBCP和CP30的区别

    https://www.cnblogs.com/haogeBlogs/p/5856302.html 转载于:https://www.cnblogs.com/Each-Person-Got-a-Drea ...

最新文章

  1. 在决策树类相关算法中,一个接点的基尼系数通常是大于还是小于他的父节点?是总是大于还是总是小于?
  2. python正态分布随机数_Python使用numpy产生正态分布随机数的向量或矩阵操作示例...
  3. C++ leetCode 1. 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个
  4. 【问题解决】老外ESP32TTS语音合成库AquesTalk ESP32测试成功
  5. 为什么torch.nn.Linear的表达形式为y=xA^T+b而不是常见的y=Ax+b?
  6. (软件工程复习核心重点)第十二章软件项目管理习题
  7. intouch负值显示0_excel表格数据为负值取0-在EXCEL表格中怎么把负数显示为0?公式怎么设置?...
  8. java编程——【Mybatis】之${}和#{}的区别
  9. python如何将天数转换为日期字符串
  10. 设计模式(1):工厂模式
  11. vue实现codemirror代码编辑器中的SQL代码格式化功能
  12. JVM之类的加载与类加载器
  13. unity aspon word excel ppt pdf转图片
  14. word转html在前端页面显示
  15. 机器学习之随机森林算法
  16. c语言-查找字符串子串(类似strstr()函数)
  17. 【论文笔记】Heterogeneous Transfer Learning for HSIC Based on CNN
  18. CV:计算机视觉技最强学习路线之CV简介(传统视觉技术/相关概念)、早期/中期/近期应用领域(偏具体应用)、经典CNN架构(偏具体算法)概述、常用工具/库/框架/产品、环境安装、常用数据集、编程技巧
  19. 速腾雷达录包方法(32线)
  20. 工业元宇宙三人行系列直播活动第五场在北京举办

热门文章

  1. 生产者与消费者问题C语言实现
  2. 企鹅号如何度过新手期,视频运营注意要点,需要几天度过
  3. Swift-UITableView快捷创建(刨坟用)
  4. QTableWidget合并单元格
  5. 【arcgis天地图wmts加载显示空白】
  6. FOJ 1021 飞船赛
  7. Linux内核移植笔记 | 02 - 移植Linux 3.4.2 内核到JZ2440(修改内核中的mtd分区)
  8. opencv-python 立体图像的深度图
  9. 突发奇想想用C解决高中排列组合问题
  10. SinaWeibo Oauth2.0授权问题