C3P0、DBCP、Tomcat JDBC Pool 连接池区别(推荐使用JDBC Pool)

2024-03-13 07:58

本文主要是介绍C3P0、DBCP、Tomcat JDBC Pool 连接池区别(推荐使用JDBC Pool),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

查看资料,得知dbcp和c3p0都是单线程的,在高并发的环境下性能会非常低下,

决定换用tomcat自带的jdbc-pool,关于jdbc-pool的项目介绍

区别参考链接:http://www.open-open.com/lib/view/open1329182303124.html

   <!--  class="org.apache.tomcat.dbcp.dbcp.BasicDataSource" --><!--  class="org.springframework.jdbc.datasource.DriverManagerDataSource" -->
       <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close" parent="c3p0DataSource">

Tomcat 在 7.0 以前的版本都是使用 commons-dbcp 做为连接池的实现,但是 dbcp 饱受诟病,原因有:

  1. dbcp 是单线程的,为了保证线程安全会锁整个连接池
  2. dbcp 性能不佳
  3. dbcp 太复杂,超过 60 个类
  4. dbcp 使用静态接口,在 JDK 1.6 编译有问题
  5. dbcp 发展滞后

因此很多人会选择一些第三方的连接池组件,例如 c3p0 , bonecp, druid (@wenshao ) 等。

为此,Tomcat 从 7.0 开始引入一个新的模块:Tomcat jdbc pool

  1. tomcat jdbc pool 近乎兼容dbcp ,性能更高
  2. 异步方式获取连接
  3. tomcat jdbc pool 是 tomcat 的一个模块,基于 tomcat JULI,使用 Tomcat 的日志框架
  4. 使用 javax.sql.PooledConnection 接口获取连接
  5. 支持高并发应用环境
  6. 超简单,核心文件只有8个,比 c3p0 还少
  7. 更好的空闲连接处理机制
  8. 支持 JMX
  9. 支持 XA Connection

tomcat jdbc pool 的优点远不止这些,详情请看这里。

tomcat jdbc pool 可在 Tomcat 中直接使用,也可以在独立的应用中使用。

推荐使用JDBC POOL

[html]  view plain copy
print ?
  1. <!-- JDBC连接池 、数据源 -->  
  2.   
  3. <bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource">  
  4.   <property name="driverClassName" value="${jdbc.driverClassName}" />  
  5.   <property name="url" value="${jdbc.url}" />  
  6.   <property name="username" value="${jdbc.username}" />  
  7.   <property name="password" value="${jdbc.password}" />  
  8.   <property name="testWhileIdle" value="true" />  
  9.   <property name="testOnBorrow" value="true" />  
  10.   <property name="testOnReturn" value="false" />  
  11.   <property name="validationQuery" value="SELECT 1" />  
  12.   <property name="validationInterval" value="30000" />  
  13.   <property name="timeBetweenEvictionRunsMillis" value="30000" />  
  14.   <property name="maxActive" value="100" />  
  15.   <property name="minIdle" value="2" />  
  16.   <property name="maxWait" value="10000" />  
  17.   <property name="initialSize" value="4" />  
  18.   <property name="removeAbandonedTimeout" value="60" />  
  19.   <property name="removeAbandoned" value="true" />  
  20.   <property name="logAbandoned" value="true" />  
  21.   <property name="minEvictableIdleTimeMillis" value="30000" />  
  22.   <property name="jmxEnabled" value="true" />  
  23. </bean>  

引入Maven依赖:

[html]  view plain copy
print ? 在CODE上查看代码片 派生到我的代码片
  1. <dependency>  
  2.     <groupId>org.apache.tomcat</groupId>  
  3.     <artifactId>tomcat-jdbc</artifactId>  
  4.     <version>7.0.29</version>  
  5. </dependency>  
  6. <dependency>  
  7.     <groupId>org.apache.tomcat</groupId>  
  8.     <artifactId>tomcat-juli</artifactId>  
  9.     <version>7.0.29</version>  
  10. </dependency>  


tomcat-dbcp与commons-dbcp有什么区别

The default database connection pool implementation in Apache Tomcat relies on the libraries from the Apache Commons project. The following libraries are used:
Commons DBCP
Commons Pool
These libraries are located in a single JAR at $CATALINA_HOME/lib/tomcat-dbcp.jar. However, only the classes needed for connection pooling have been included, and the packages have been renamed to avoid interfering with applications.
以上是tomcat7.x的帮助文档,大意是tomcat-dbcp.jar包含了commons-dbcp和Commons Pool的内容,当然也只仅仅包含了需要数据库连接的部分,而不是全部。

 

这篇关于C3P0、DBCP、Tomcat JDBC Pool 连接池区别(推荐使用JDBC Pool)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/804145

相关文章

使用Vue-ECharts实现数据可视化图表功能

《使用Vue-ECharts实现数据可视化图表功能》在前端开发中,经常会遇到需要展示数据可视化的需求,比如柱状图、折线图、饼图等,这类需求不仅要求我们准确地将数据呈现出来,还需要兼顾美观与交互体验,所... 目录前言为什么选择 vue-ECharts?1. 基于 ECharts,功能强大2. 更符合 Vue

如何合理使用Spring的事务方式

《如何合理使用Spring的事务方式》:本文主要介绍如何合理使用Spring的事务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、底层构造1.1.事务管理器1.2.事务定义信息1.3.事务状态1.4.联系1.2、特点1.3、原理2. Sprin

Vue中插槽slot的使用示例详解

《Vue中插槽slot的使用示例详解》:本文主要介绍Vue中插槽slot的使用示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、插槽是什么二、插槽分类2.1 匿名插槽2.2 具名插槽2.3 作用域插槽三、插槽的基本使用3.1 匿名插槽

使用WPF实现窗口抖动动画效果

《使用WPF实现窗口抖动动画效果》在用户界面设计中,适当的动画反馈可以提升用户体验,尤其是在错误提示、操作失败等场景下,窗口抖动作为一种常见且直观的视觉反馈方式,常用于提醒用户注意当前状态,本文将详细... 目录前言实现思路概述核心代码实现1、 获取目标窗口2、初始化基础位置值3、创建抖动动画4、动画完成后

PyQt5 QDate类的具体使用

《PyQt5QDate类的具体使用》QDate是PyQt5中处理日期的核心类,本文主要介绍了PyQt5QDate类的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录核心功能常用方法及代码示例​1. 创建日期对象​2. 获取日期信息​3. 日期计算与比较​4. 日

Go语言使用slices包轻松实现排序功能

《Go语言使用slices包轻松实现排序功能》在Go语言开发中,对数据进行排序是常见的需求,Go1.18版本引入的slices包提供了简洁高效的排序解决方案,支持内置类型和用户自定义类型的排序操作,本... 目录一、内置类型排序:字符串与整数的应用1. 字符串切片排序2. 整数切片排序二、检查切片排序状态:

使用Java将实体类转换为JSON并输出到控制台的完整过程

《使用Java将实体类转换为JSON并输出到控制台的完整过程》在软件开发的过程中,Java是一种广泛使用的编程语言,而在众多应用中,数据的传输和存储经常需要使用JSON格式,用Java将实体类转换为J... 在软件开发的过程中,Java是一种广泛使用的编程语言,而在众多应用中,数据的传输和存储经常需要使用j

Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例

《Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例》本文介绍Nginx+Keepalived实现Web集群高可用负载均衡的部署与测试,涵盖架构设计、环境配置、健康检查、... 目录前言一、架构设计二、环境准备三、案例部署配置 前端 Keepalived配置 前端 Nginx

Python logging模块使用示例详解

《Pythonlogging模块使用示例详解》Python的logging模块是一个灵活且强大的日志记录工具,广泛应用于应用程序的调试、运行监控和问题排查,下面给大家介绍Pythonlogging模... 目录一、为什么使用 logging 模块?二、核心组件三、日志级别四、基本使用步骤五、快速配置(bas

SpringBoot中HTTP连接池的配置与优化

《SpringBoot中HTTP连接池的配置与优化》这篇文章主要为大家详细介绍了SpringBoot中HTTP连接池的配置与优化的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、HTTP连接池的核心价值二、Spring Boot集成方案方案1:Apache HttpCl