Tomcat 7 新的连接池 —— Tomcat jdbc pool + JNDI

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

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

因此很多人会选择一些第三方的连接池组件,例如 c3p0 , bonecpdruid (@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   
  conf/context.xml  ,添加数据源
<Resource 
    name="jdbc/score"
    auth="Container"
    factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
    testWhileIdle="true"
    testOnBorrow="true"
    testOnReturn="false"
    validationQuery="SELECT 1"
    validationInterval="30000"
    timeBetweenEvictionRunsMillis="30000"
    driverClassName="com.mysql.jdbc.Driver"
    maxActive="100"
    maxIdle="40"
    maxWait="12000"
    initialSize="10"
    removeAbandonedTimeout="60"
    removeAbandoned="true"
    logAbandoned="true"
    minEvictableIdleTimeMillis="30000"
    jmxEnabled="true"
    jdbcInterceptors=
"org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"
    username="root"
    password="root"
    type="javax.sql.DataSource" 
    
    url="jdbc:mysql://localhost:3306/score?characterEncoding=UTF-8"/>
在java 程序中获取数据源
Context =context = new InitialContext();
	DataSource dataSource =(DataSource) context.lookup("java:comp/env/jdbc/score");
	Connection dbConnection =dataSource.getConnection(); 

如果程序运直接运行在Tomcat容器中,还需要配置web.xml

  <resource-ref>
      <description>DB Connection</description>
      <res-ref-name>jdbc/score</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
  </resource-ref>


    


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值