替换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接口获取连接。
饥饿算法。如果连接池空了,同时一个线程要获得连接,当一个连接返回到连接池,连接池会将正确的线程唤醒。
等,与这些连接池实现相比,Tomcat jdbc pool更突出的功能体现在:
支持多核系统,提供更好的高并发性能。
接口动态实现,运行时环境支持java.sql和javax.sql接口,可以使用低版本JDK编译。
无需每次使用连接时都验证连接,可以在获取或返回连接时验证,不用比设置的间隔时间更频繁。
当数据库连接建立时,一个可设置的查询将运行一次。这对保持连接建立整个时间中的会话十分有用。
可以自定义拦截器增强功能。可定义拦截器来收集查询统计,缓存会话状态,重新连接,重新查询,缓存查询结果等。
高性能
极其简单,由于非常简单的实现,源程序行数和文件数很少,相比c3p0的200多个源程序文件,Tomcat jdbc只有8个核心源文件,关于连接池的部分只有4个文件。这样更容易追溯和修改Bug。减少复杂性就是起初开发的一个焦点。
异步获取连接,可将连接请求形成队列,系统返回Future
更好的空闲连接处理,应用更优化的算法调整连接池大小和连接的释放。
用户来决定当连接池满了在什么时刻释放连接,或者直接设置一个超时的阀值。
释放连接定时器将会在查询时重置。允许一个使用很长时间的连接不超时。这个功能由ResetAbandonedTimer完成。
在连接一定长时间后关闭连接。时间与返回连接池的时间相似。
当连接要被释放时,将得到JMX通知并且记录整个日志。这和removeAbandonedTimeout相似,但是只输出信息,不做任何操作。使用suspectTimeout属性完成设置。
可以从java.sql.Driver,javax.sql.DataSource或者javax.sql.XADataSource中取得连接,使用dataSource和dataSourceJNDI属性完成。
支持XA连接。
如何使用
单独使用
import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import org.apache.tomcat.jdbc.pool.DataSource; import org.apache.tomcat.jdbc.pool.PoolProperties; public class SimplePOJOExample { public static void main(String[] args) throws Exception { PoolProperties p = new PoolProperties(); p.setUrl("jdbc:mysql://localhost:3306/mysql"); p.setDriverClassName("com.mysql.jdbc.Driver"); p.setUsername("root"); p.setPassword("password"); p.setJmxEnabled(true); p.setTestWhileIdle(false); p.setTestOnBorrow(true); p.setValidationQuery("SELECT 1"); p.setTestOnReturn(false); p.setValidationInterval(30000); p.setTimeBetweenEvictionRunsMillis(30000); p.setMaxActive(100); p.setInitialSize(10); p.setMaxWait(10000); p.setRemoveAbandonedTimeout(60); p.setMinEvictableIdleTimeMillis(30000); p.setMinIdle(10); p.setLogAbandoned(true); p.setRemoveAbandoned(true); p.setJdbcInterceptors("org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;"+ "org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"); DataSource datasource = new DataSource(); datasource.setPoolProperties(p); Connection con = null; try { con = datasource.getConnection(); Statement st = con.createStatement(); ResultSet rs = st.executeQuery("select * from user"); int cnt = 1; while (rs.next()) { System.out.println((cnt++)+". Host:" +rs.getString("Host")+ " User:"+rs.getString("User")+" Password:"+rs.getString("Password")); } rs.close(); st.close(); } finally { if (con!=null) try {con.close();}catch (Exception ignore) {} } } }
作为数据源在Tomcat中使用
异步获取连接1.必须将fairQueue设置为true2.必须将数据源转换为org.apache.tomcat.jdbc.pool.DataSource
Connection con = null; try { Future future = datasource.getConnectionAsync(); while (!future.isDone()) { System.out.println("Connection is not yet available. Do some background work"); try { Thread.sleep(100); //simulate work }catch (InterruptedException x) { Thread.currentThread().interrupted(); } } con = future.get(); //should return instantly Statement st = con.createStatement(); ResultSet rs = st.executeQuery("select * from user");
相关推荐
NULL 博文链接:https://jackyin5918.iteye.com/blog/1922379
### Tomcat 6.0 使用 JDBC 连接池配置详解 #### 一、概述 本文主要介绍了如何在 Tomcat 6.0 中设置 JDBC 连接池,以便更有效地管理和利用数据库连接资源。通过合理配置,可以显著提高 Web 应用程序的性能和稳定性...
### Tomcat 6.0 使用 JDBC 连接池连接 MySQL 操作步骤详解 #### 一、环境搭建 在正式开始之前,确保您的计算机上已经安装了以下组件: 1. **JDK**: Java Development Kit(Java 开发工具包),本文档采用的是 JDK...
Tomcat 连接池和阿里 Druid 连接池都是常用的数据库连接池实现,但是它们有不同的特点和使用场景。下面是它们的比较: |特点|Tomcat 连接池|阿里 Druid 连接池| | --- | --- | --- | |性能|高效|高效| |可靠性|可靠...
这个数据源是Tomcat内建的一种连接池,它在性能和内存管理上比标准的Java JDBC连接池更优秀,尤其适用于高并发的Web应用。 标题中提到的"tomcat-jdbc.jar"和"tomcat-juli.jar"是使用Tomcat-jdbc数据源所必需的两个...
Java JDBC连接池是一种高效管理数据库连接的技术,它允许应用程序重复使用已经建立的数据库连接,而不是每次需要时都创建新的连接。这显著提高了性能并减少了系统资源的消耗,尤其是在高并发的环境中。本类库提供了...
在IT行业中,数据库连接管理是应用系统性能优化的关键一环,而JDBC连接池就是解决这一问题的有效工具。本文将深入探讨如何自定义JDBC连接池,并对常用的连接池技术进行介绍。 首先,自定义JDBC连接池的核心在于管理...
### Tomcat6配置连接池详解 #### 一、引言 在Java Web开发中,数据库连接池技术的应用极为广泛。合理的数据库连接管理不仅能提高应用程序的性能,还能有效避免因频繁创建销毁连接所导致的资源浪费问题。Apache ...
1. **选择连接池实现**:首先,我们需要选择一个合适的数据库连接池实现,如Apache的DBCP、C3P0、HikariCP或Tomcat JDBC连接池等。这些连接池库提供了管理和维护数据库连接的功能。 2. **配置连接池**:在应用的...
本文将基于“Tomcat配置连接池说明”的文件信息,深入解析如何在Apache Tomcat中设置连接池,确保应用程序能够高效、稳定地访问数据库资源。 ### 一、理解连接池的重要性 在Web应用中,频繁的数据库连接创建与释放...
为了解决这一问题,引入了JDBC连接池技术,它能够预先创建并维护一定数量的数据库连接,当应用程序请求连接时,可以从池中获取一个现有的连接,而无需每次都创建新的连接,从而极大地提高了数据库访问效率。...
JDBC连接池是一种资源管理机制,它允许应用程序重复使用已建立的数据库连接,而不是每次需要时都创建新的连接。这显著提高了性能,减少了系统资源的消耗,并有助于避免由于过多的数据库连接导致的问题。在Tomcat早期...
数据库连接池的正确配置对于基于Tomcat的应用而言至关重要,不仅能有效提高系统的响应速度,还能优化资源使用,减少服务器负担。通过遵循上述步骤,开发者可以顺利完成Tomcat5.0.25下的数据库连接池配置,从而构建出...
JDBC连接池是在应用服务器启动时创建一系列的数据库连接,将其保存在内存中,当应用程序需要与数据库交互时,不再直接创建新的连接,而是从连接池中获取一个已经存在的连接,用完后也不直接关闭,而是归还给连接池...
以下是对TOMCAT数据库连接池配置的详细说明。 首先,你需要下载TOMCAT及其管理控件包,通常推荐使用5.x版本。安装完成后,启动TOMCAT服务器,你可以在任务栏看到TOMCAT的图标。接下来,通过浏览器访问TOMCAT的管理...
- C3P0:开源的JDBC连接池,提供了比JDBC更强大的功能,如自动检测死锁、自动重连等。 - DBCP:Apache的一个开源项目,基于Jakarta-pool实现,是Tomcat默认的数据源。 - HikariCP:被誉为“最快的Java JDBC连接池”...
《深入理解Tomcat JDBC连接池7.0.42版》 在Java Web开发中,数据库连接管理是至关重要的部分,而Tomcat JDBC连接池(也称为Tomcat JNDI DataSource Provider)则是一个高效、轻量级且功能丰富的连接池实现。这个...