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

时间:2022-04-29
本文章向大家介绍数据库连接池-tomcat-jdbc食用笔记,主要内容包括1.作为JNDI资源使用、2.Spring容器中使用、3.配置注意事项、JNDI 工厂与类型、常用属性、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

现在 主流的数据库连接池有: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配置样例:

 <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容器中使用

<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