浅谈各种数据库连接池
1.各种数据库连接池
开源的免费连接池:
DBCP C3P0 Proxool Druid Jakarta DDConnectionBroker BoneCP
XAPool Primrose SmartPool MiniConnectionPoolManager
商业的中间件连接池:
weblogic的连接池 websphere的连接池
2. 常用的连接池比较:
DBCP可能是最常用的开源连接池,常用的原因
一是配置比较方便;
二是很多开源和tomcat的例子基本都是使用DBCP连接池。
该连接池的基本功能都有,比如配置最大和最小的连接数,连接等待时间等。
性能:在项目中测试,此连接池的持续运行的稳定性还是可以,但速度稍慢,
在高并发的压力下稳定性有所下降,不提供连接池监控。
C3P0也是常用的一款开源的连接池,在开发中用的也比较多,基本功能齐全。
性能:在项目中测试,发现此连接池的持续运行的稳定性相当不错,
在高并发的压力下稳定性也有一定的保证,不提供连接池监控
Proxool这个连接池可能较少有人使用,但其提供连接池监控也有一定的知名度,基本功能齐全。
性能:在项目中测试,此连接池的持续运行稳定性有一定的问题,但是因为他具备监控功能,
很多时候会用在开发测试的阶段,有助于确定是否有连接没有被关掉等来排除代码的一些性能问题。
上面的三种都是开源的连接池的比较,如果有机会使用商业的中间件连接池的话,开源的可以直接忽略掉,
因为花钱的东西和免费的东西完全不在一个量级。
简单的说下weblogic连接池,基本配置可以在网上查,这里说下weblogic连接池Test Reserved Connections
(对取得的连接进行测试)和Test Released Connections(对释放的连接进行测试)这两个选项,有时候在系统
压力大的时候会出现连接失效的异常,使用该连接池就会避免这个问题,因为Test Reserved Connections和
Test Released Connections在每次连接和释放的时候都会帮我们先测试,一旦检查 到连接是无效的他会废弃掉
还给数据库,只给你有效的。
性能:在具体项目应用中,此连接池的持续运行的稳定性强,在高并发的压力下性能也相当优秀,
在一些异常情况下连接池里的连接也能够及时释放。连接池监控一目了然,及时到位。
3.Druid数据库连接池
这里重点介绍下Druid连接池的配置和使用,Druid 是阿里的一款数据库连接池,据阿里介绍,Druid 是目前开源
中最好的连接池,在功能,性能,可扩展性方面远胜于其他的数据库连接池,并且Druid 已经部署了 超过7000个
阿里应用,经过了长时间生产环境大规模部署的严苛考验 ,这话有没有水分很难说,但确实有它的优点:
- druid 内置了一个功能强大的statfilter插件,能够详细统计sql的执行性能, 这可以帮助我们对线上访问数据库性能进行分析。
- 直接把数据库密码写在配置文件中是一个不好的行为,容易导致数据库安全问题,DruidDataSource支持PasswordCallBack可以解决这一问题。
- Druid提供了不同的LogFilter,可以根据情况选择。
- 如果对JDBC层有编程的需求,可以通过Druid提供的Filter机制,编写JDBC层的扩展插件。
下载 druid-0.2.20.jar http://download.csdn.net/detail/wind520/5670085
在web.xml中配置上下面这段,就可以实时查看连接池使用情况
<filter>
<filter-name>DruidWebStatFilter</filter-name>
<filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
<init-param>
<param-name>exclusions</param-name>
<param-value>/static/*,*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>DruidWebStatFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>DruidStatView</servlet-name>
<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DruidStatView</servlet-name>
<url-pattern>/druid/*</url-pattern>
</servlet-mapping>
datasource.xml中配置
<bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
<!-- initialSize默认0:初始化时建立物理连接的个数 -->
<property name="initialSize" value="${druid.initialSize}" />
<!-- maxActive默认8:最大连接池数量 -->
<property name="maxActive" value="${druid.maxActive}" />
<!-- minIdle默认8:最小连接池数量 -->
<property name="minIdle" value="${druid.minIdle}" />
<property name="maxWait" value="${druid.maxWait}" />
<property name="validationQuery" value="${validationQuery}" />
<property name="testOnBorrow" value="${druid.testOnBorrow}" />
<property name="testOnReturn" value="${druid.testOnReturn}" />
<property name="testWhileIdle" value="${druid.testWhileIdle}" />
<property name="timeBetweenEvictionRunsMillis" value="${druid.timeBetweenEvictionRunsMillis}" />
<!-- minEvictableIdleTimeMillis:配置一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="${druid.minEvictableIdleTimeMillis}" />
<!-- 当发生连接泄漏时,使用RemoveAbandanded相关配置,用来关闭长时间不使用的连接。 -->
<property name="removeAbandoned" value="${druid.removeAbandoned}" />
<!-- removeAbandonedTimeout:单位秒 -->
<property name="removeAbandonedTimeout" value="${druid.removeAbandonedTimeout}" />
<!-- 关闭abanded连接时输出错误日志 -->
<property name="logAbandoned" value="${druid.logAbandoned}" />
<property name="filters" value="${druid.filters}" />
</bean>
转载于:https://www.cnblogs.com/fyboke/p/6245951.html
浅谈各种数据库连接池相关推荐
- 浅谈ThreadPool 线程池(引用)
出自:http://www.cnblogs.com/xugang/archive/2010/04/20/1716042.html 浅谈ThreadPool 线程池 相关概念: 线程池可以看做容纳线程的 ...
- 常在池边游,却不曾到池子里一探究竟?浅谈Java线程池
浅谈Java线程池 线程池,简单来说,就是一个池子嘛,里面养着一群线程,ABCD........,然后你要用的时候,从里面拿一个去用,用完放回去. 一群人要用的时候,每个人都从池子里面拿一个线程,当池 ...
- 浅谈各种连接池中连接数量的设置
连接池中连接数量的配置 我们日常开发中经常会用到各种连接池,比如httpclient和jediscluster以及druid等数据库连接池,当使用这些连接池的时候我们总是很疑惑到底要怎么配置连接池中连 ...
- 浅谈安卓线程池相关问题
作为一个标准的程序员,我们都非常清楚.线程的创建和销毁时一个耗时的操作,如果在程序中反复创建和销毁,那么APP的流畅度会很受影响,甚至会奔溃.为了增加程序健壮性且能是实现复杂业务逻辑,这时候我们引入线 ...
- java线程池和线程实例化_浅谈Java 线程池原理及使用方式
一.简介 什么是线程池? 池的概念大家也许都有所听闻,池就是相当于一个容器,里面有许许多多的东西你可以即拿即用.java中有线程池.连接池等等.线程池就是在系统启动或者实例化池时创建一些空闲的线程,等 ...
- 浅谈ThreadPool 线程池
相关概念: 线程池可以看做容纳线程的容器: 一个应用程序最多只能有一个线程池: ThreadPool静态类通过QueueUserWorkItem()方法将工作函数排入线程池: 每排入一个工作函数,就相 ...
- 浅谈python线程池
python线程池的使用 python的多线程管理一直很麻烦,可能是我基础不够好,这里记录并分享以下python的线程池管理 在网上查了一个线程池的使用资料,个人感觉不是很清晰 但是重点很到位, 原文 ...
- 浅谈数据库连接池原理及优势
https://blog.csdn.net/C99965/article/details/107488372 连接池的工作原理主要由三部分组成,分别为 第一.连接池的建立. 一般在系统初始化时,连接池 ...
- 浅谈线程池(上):线程池的作用及CLR线程池
线程池是一个重要的概念.不过我发现,关于这个话题的讨论似乎还缺少了点什么.作为资料的补充,以及今后文章所需要的引用,我在这里再完整而又简单地谈一下有关线程池,还有.NET中各种线程池的基础.更详细的内 ...
最新文章
- kangle php集成环境包,PHP探针-UPUPW环境集成包KANGLE专用版 | bftxjc.com contacts
- 2021.8.21 网易秋招开发笔试(题目 + java代码)
- Verilog语言中如何将memory型变量转换为普通变量
- arm-linux-ld: cannot find -lgcc,/arm-linux-gnueabi/bin/ld: cannot find crt1.o
- 活动: 北京Xamarin分享会第4期(2017年7月8日)
- lora技术和zigbee技术那个好,两者有啥优势
- 2021年第3周LDL方向的周报
- 百度SEO最新小某云商城系统源码 免授权V1.61版
- WordPress后台保护插件 Sabre 和 电子商务插件E - commerce GetShopped
- 回溯算法与八皇后问题
- MySQL 批量插入,如何不插入重复数据?
- 图说区块链:神一样的金融科技与未来社会
- 弥合银行业的数字鸿沟
- android音频服务,android-在后台服务中录制音频
- 微信小程序显示圆形图片
- alt 工程开发时,atl向导报IE脚本错误问题的处理
- 用东野圭吾的方式说爱你
- 求1至10乘阶的总和及求任意数乘阶
- 背包九讲之一:01背包问题
- 蓝牙的基本概念以及发展轨迹 - 蓝牙的前生后世