设为首页 收藏本站
查看: 1123|回复: 0

[经验分享] 浅谈各种数据库连接池

[复制链接]

尚未签到

发表于 2017-2-18 12:51:52 | 显示全部楼层 |阅读模式
  
  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在每次连接和释放的时候都会帮我们先测试,一旦检查 到连接是无效的他会废弃掉
  还给数据库,只给你有效的。
  性能:在具体项目应用中,此连接池的持续运行的稳定性强,在高并发的压力下性能也相当优秀,
  在一些异常情况下连接池里的连接也能够及时释放。连接池监控一目了然,及时到位。
  3Druid数据库连接池
  这里重点介绍下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>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-343898-1-1.html 上篇帖子: 1.认识EJB 下篇帖子: 正确理解http会话管理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表