前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据库连接池-tomcat-jdbc食用笔记

数据库连接池-tomcat-jdbc食用笔记

作者头像
斯武丶风晴
发布2018-03-01 11:05:49
3.4K0
发布2018-03-01 11:05:49
举报
文章被收录于专栏:龙首琴剑庐龙首琴剑庐

现在 主流的数据库连接池有:Proxool、C3P0、DBCP、tomcat-jdbc、Druid。其中tomcat-jdbc是tomcat服务器比较可靠的 数据库连接池。

Tomcat 在 7.0 以前的版本都是使用commons-dbcp做为连接池的实现,但是DBCP存在一些问题:

  •     DBCP 是单线程的,为了保证线程安全会锁整个连接池
  •     DBCP 性能不佳
  •     DBCP 太复杂,超过60个类,发展滞后。

    因此,通常J2EE中还会使用其它的高性能连接池,如C3P0,还有阿里系的druid等。为此,Tomcat 从 7.0 开始引入一个新的模块: Tomcat Jdbc Pool     Tomcat Jdbc Pool 近乎兼容 DBCP,性能更高

  • 异步方式获取连接
  • Tomcat Jdbc Pool是Tomcat的一个模块,基于Tomcat-Juli,使用Tomcat的日志框架
  • 使用 javax.sql.PooledConnection 接口获取连接
  • 支持高并发应用环境
  • 超简单,核心文件只有8个,比 c3p0 还少
  • 更好的空闲连接处理机制
  • 支持 JMX
  • 支持 XA Connection。
  • Tomcat Jdbc Pool 可在 Tomcat 中直接使用,也可以在独立的应用中使用。

1.作为JNDI资源使用

tomcat 数据源JNDI配置样例:

代码语言:javascript
复制
 <Resource name="jdbc/appdb" auth="Container"
              type="javax.sql.DataSource"
              maxActive="10000" maxIdle="100" maxWait="10000" logAbandoned="true"
              username="root" password="root123" driverClassName="oracle.jdbc.driver.OracleDriver"
              url="jdbc:oracle:thin:@10.45.47.88:1521:orcl"
              factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
              testOnBorrow="false" testOnReturn="false"
              testWhileIdle="true"
              timeBetweenEvictionRunsMillis="30000"
    />

2.Spring容器中使用

代码语言:javascript
复制
<context:property-placeholder location="classpath:config/jdbc.properties"/>
<bean id="datasource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close"    
    p:driverClassName="${jdbc.db.driverClassName}"
    p:url="${jdbc.db.url}"
    p:username="${jdbc.db.username}"
    p:password="${jdbc.db.password}"   
    p:initialSize="10"
    p:minIdle="10"
    p:maxIdle="100"
    p:maxActive="100"
    p:maxWait="6000"
    p:logAbandoned="true"
    p:testOnBorrow="false"
    p:testOnReturn="false"
    p:testWhileIdle="true"   
    p:timeBetweenEvictionRunsMillis="30000"
    p:minEvictableIdleTimeMillis="30000"
/>

3.配置注意事项

必须配置,才能启用tomcat-jdbc:

factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"

并且数据库驱动必须复制一份到tomcat/lib目录下,如

JNDI 工厂与类型

属性

描述

factory

必需的属性,其值应为 org.apache.tomcat.jdbc.pool.DataSourceFactory

type

类型应为 javax.sql.DataSource 或 javax.sql.XADataSource。 根据类型,将创建org.apache.tomcat.jdbc.pool.DataSource 或 org.apache.tomcat.jdbc.pool.XADataSource。

常用属性

属性

描述

maxActive

(整形值)池同时能分配的活跃连接的最大数目。默认为 100。

maxIdle

(整型值)池始终都应保留的连接的最大数目。默认为 maxActive:100。会周期性检查空闲连接(如果启用该功能),留滞时间超过 minEvictableIdleTimeMillis 的空闲连接将会被释放。(请参考 testWhileIdle)

minIdle

(整型值)池始终都应保留的连接的最小数目。如果验证查询失败,则连接池会缩减该值。默认值取自 initialSize:10(请参考 testWhileIdle)。

initialSize

(整型值)连接器启动时创建的初始连接数。默认为 10。

maxWait

(整型值)在抛出异常之前,连接池等待(没有可用连接时)返回连接的最长时间,以毫秒计。默认为 30000(30 秒)

testOnBorrow

(布尔值)默认值为 false。从池中借出对象之前,是否对其进行验证。如果对象验证失败,将其从池中清除,再接着去借下一个。注意:为了让 true 值生效,validationQuery 参数必须为非空字符串。为了实现更高效的验证,可以采用 validationInterval。

testOnReturn

(布尔值)默认值为 false。将对象返回池之前,是否对齐进行验证。注意:为了让 true 值生效,validationQuery 参数必须为非空字符串。

testWhileIdle

(布尔值)是否通过空闲对象清除者(如果存在的话)验证对象。如果对象验证失败,则将其从池中清除。注意:为了让 true 值生效,validationQuery 参数必须为非空字符串。该属性默认值为 false,为了运行池的清除/测试线程,必须设置该值。(另请参阅 timeBetweenEvictionRunsMillis)

timeBetweenEvictionRunsMillis

(整型值)空闲连接验证/清除线程运行之间的休眠时间(以毫秒计)。不能低于 1 秒。该值决定了我们检查空闲连接、废弃连接的频率,以及验证空闲连接的频率。默认为 5000(5 秒)

其他请参考官方文档:https://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html

或者译文:http://wiki.jikexueyuan.com/project/tomcat/tomcat-jdbc-pool.html

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.作为JNDI资源使用
  • 2.Spring容器中使用
  • 3.配置注意事项
  • JNDI 工厂与类型
  • 常用属性
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档