博文

目前显示的是 一月, 2012的博文

Tomcat 7 的新JDBC连接池的使用说明

Tomcat 7 的JDBC连接池实现类为 org.apache.tomcat.jdbc.pool ,作为替换 commons-dbcp 的方案。 替换 commons-dbcp 的原因如下: commons-dbcp 是单线程的,为了线程安全,就要琐住整个连接池,查询验证阶段也要琐住整个连接池。 commons-dbcp 速度慢,性能差,多CPU的环境下单线程运行,不支持高并发,在JAVA 6中也不能解决速度和并发的问题。 commons-dbcp 实现复杂,超过60个类。 tomcat-jdbc-pool 核心只有8个类,修改更加简单,只需运行连接池本身,易测试。 commons-dbcp 应用静态接口,就意味着并不能用JDK 1.6编译它,在JDK 1.6/1.7中运行时,即使驱动程序支持,所有没有实现的方法也都会抛出 NoSuchMethodException 异常。 commons-dbcp 几乎停滞,很少更新。 作为一个连接池的简单实现不值得重写超过60个类。 Tomcat jdbc连接池实现了一个 commons-dbcp 没有的公平算法,并且比 commons-dbcp 性能更好。 Tomcat jdbc连接池实现了异步获取连接,也不需增加额外的线程。 Tomcat jdbc连接池是一个Tomcat的模块,依赖于Tomcat JULI(Tomcat日志框架) 使用 javax.sql.PooledConnection 接口获取连接。 饥饿算法。如果连接池空了,同时一个线程要获得连接,当一个连接返回到连接池,连接池会将正确的线程唤醒。 除了 commons-dbcp 连接池,还有其它可以选择的方案,如 c3p0 , bonecp 等,与这些连接池实现相比,Tomcat jdbc pool更突出的功能体现在: 支持多核系统,提供更好的高并发性能。 接口动态实现,运行时环境支持 java.sql 和 javax.sql 接口,可以使用低版本JDK编译。 无需每次使用连接时都验证连接,可以在获取或返回连接时验证,不用比设置的间隔时间更频繁。 当数据库连接建立时,一个可设置的查询将运行一次。这对保持连接建立整个时间中的会话十分有用。 可以自定义拦截器增强功能。可定义拦截器来收集查询统计,缓存会话状