`

数据库连接池基础知识_dbcp_c3p0_简单了解

    博客分类:
  • jdbc
 
阅读更多

 

 

0 前提:

数据库连接是很宝贵的资源,每一次初始化一个连接时都耗时较长,如果网站访问量较大,并不做优化前提下,很容易造成数据库服务器内存溢出,导致宕机。

 

1 数据库连接池:

 

结构如下图:

 


 

 

2  java提供类来让开发人员自定义实现数据库连接池: (一般都是用开源的数据库连接池)

 

2.0 自己编写连接池大概流程:


编写连接池需实现java.sql.DataSource接口。DataSource接口中定义了两个重载的getConnection方法:
Connection getConnection()
Connection getConnection(String username, String password)

 

开发的流程: 一次性从数据库中获取X个conn,然后将原始的conn(Connection)动态代理,然后将这些个conn放如到linkedlist保存,每次获取conn时去list获取,当在业务逻辑代码中执行释放资源时,将使用的动态代理的close将conn返回到list中。

其中对connection动态代理后代码如下:

	public Connection getConnection() throws SQLException { // 这就是使用动态代理技术构建除了conn返回出去了
		
		if(connections.size()>0){
			final Connection conn = connections.removeFirst();
			System.out.println(conn + "从连接池里面取出来了!!,池大小为:" + connections.size());
			//第三个参数表示返回的代理对象干什么事情
			/*
			 *Proxy --JDK提供的这个类 可以构建成某一接口的 代理对象 
			 * 调用方法 newProxyInstance(当前类的类加载器,  给的是那个类的接口那么返回的就是这个类的代理对象, 返回的是代理对象要干的事情,事情是通过对象来指定的);
			 */
			return (Connection)Proxy.newProxyInstance(JdbcPool.class.getClassLoader(),conn.getClass().getInterfaces(), new InvocationHandler(){

				public Object invoke(Object proxy, Method method, Object[] args)
						throws Throwable {
					
					if(method.getName().equals("close")){
						connections.addLast(conn);
						System.out.println(conn + "被还到池里了!!,池大小为:" + connections.size());
					}else{// 如果不是调用conn的close方法而是调用conn的其他方法那么我就调用mysql的conn把其他事情给干了
						return method.invoke(conn, args);
					}
					return null;
				}
			});
			
		}else{
			throw new RuntimeException("服务器繁忙,请过会再来!!");
		}
	}

 

 

 

2.1 市场上开源的连接池介绍(原理都是 1 维护X个数据库连接资源conn 2对原始conn实现动态代理,主要涉及两块 执行close时将conn返回到list 执行别的方法时交由原始conn执行):

 

一些开源组织提供了数据源(数据库连接池+技术实现)的独立实现,实际应用时不需要编写连接数据库代码

a) DBCP 数据库连接池,

需要jarCommons-dbcp.jar:连接池的实现  Commons-pool.jar:连接池实现的依赖库

配置文件:

#连接设置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbc3
username=root
password=root

#<!-- 初始化连接 -->
initialSize=5

#最大连接数量
maxActive=50

#<!-- 最大空闲连接 -->
maxIdle=20

#<!-- 最小空闲连接 -->
minIdle=5

#<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
maxWait=60000


#JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;] 
#注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。
connectionProperties=useUnicode=true;characterEncoding=gbk

#指定由连接池所创建的连接的自动提交(auto-commit)状态。
defaultAutoCommit=true

#driver default 指定由连接池所创建的连接的只读(read-only)状态。
#如果没有设置该值,则“setReadOnly”方法将不被调用。(某些驱动并不支持只读模式,如:Informix)
defaultReadOnly=

#driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。
#可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
defaultTransactionIsolation=READ_UNCOMMITTED

 

 


b) C3P0 数据库连接池

需要的jar : c3p0-0.9.1.2.jar

 

关于这两个数据源的读取写法,需要的JAR,配置文件 见附件: db_super.rar

 

 

 

 


 

 

  • 大小: 33.8 KB
分享到:
评论

相关推荐

    C3P0连接池jar包(完整版).zip

    C3P0连接池是Java开发中常用的数据库连接池组件,它由Mchange公司开发,全称为ComMchange Vizual Analytics C3P0。这个压缩包“C3P0连接池jar包(完整版).zip”包含了C3P0连接池运行所需的全部依赖,便于开发者在...

    早期写的数据库连接池

    早期的数据库连接池实现,例如DBCP (Database Connection Pool) 和C3P0,都是开源的Java库,广泛应用于Java EE应用服务器。这些库提供了API供开发者集成到他们的应用程序中,以利用连接池的优势。 DBCP是Apache软件...

    连接池_java_sql2005

    在Java编程中,数据库连接池是一种管理资源的技术,它允许应用程序重复使用已打开的数据库连接,而不是每次需要访问数据库时都创建新的连接。这大大提高了应用程序的性能和效率,减少了数据库系统的负载。在这个...

    baseDAO及其实现案例、jdbcUtil工具类、数据池c3p0、dbcp、druid驱动及实现方式

    本资源涉及到的主要知识点包括`BaseDAO`设计模式、`JDBCUtil`工具类以及数据库连接池技术,如`C3P0`、`DBCP`和`Druid`。以下将对这些内容进行详细阐述。 首先,`BaseDAO`是一个设计模式,用于封装数据库的基本操作...

    DBCP配置数据库连接池需要的jar包

    虽然DBCP是一个简单易用的连接池实现,但在现代Java应用中,更流行的数据库连接池实现有HikariCP、C3P0和Tomcat JDBC Pool等,它们提供了更好的性能和更丰富的特性。 总之,DBCP是一个基础的数据库连接池实现,...

    java数据库连接池的资料

    总的来说,这个压缩包包含了一套完整的Java数据库连接池学习资源,从基本概念到具体实现,对于想要深入了解和使用Java数据库连接池的开发者来说,是一份宝贵的参考资料。通过学习这些内容,开发者可以更好地理解和...

    mysql 数据库连接池

    - DBCP (Apache Commons DBCP):Apache提供的基础数据库连接池,简单易用。 - HikariCP:高性能的连接池,设计目标是提供最低的延迟和最高的性能。 - Druid:阿里巴巴开源的数据库连接池,具有监控、扩展性强等...

    数据库连接池的工作原理

    数据库连接池是现代应用程序开发中不可或缺的一个组件,它在...了解并合理利用数据库连接池的工作原理,可以帮助我们编写出更加高效、稳定的应用程序。正确配置和选择合适的连接池实现,是提升系统性能的关键步骤之一。

    dbcp,c3p0,io

    本主题将深入探讨两个流行的数据库连接池实现:C3P0和DBCP,以及与输入流、输出流相关的IO操作。 首先,让我们详细了解C3P0。C3P0是由Miquel Piera开发的一个开源数据库连接池,它提供了一个健壮的连接池实现,支持...

    Product_web-JSP连接数据库.rar_jsp_jsp 数据库_jsp数据库_web j

    4. 数据库连接池:可能涉及到如何配置和使用像C3P0、DBCP或HikariCP这样的连接池,以提高性能和资源利用率。 5. SQL语句:包括SELECT、INSERT、UPDATE、DELETE等基本操作,以及更复杂的JOIN、子查询等。 6. 异常处理...

    java数据库连接池.pdf

    - C3P0:开源的数据库连接池,提供了数据库连接的自动获取与释放。 - DBCP(Apache Commons DBCP):Apache组织提供的连接池实现,基于Jakarta POI项目。 - HikariCP:高性能的连接池实现,以其快速的连接创建和...

    jdbc数据库连接池工程文件

    - **DBCP**:Apache提供的数据库连接池,基于Jakarta-pool实现。 - **HikariCP**:目前性能最佳的连接池,设计目标是速度、简单性和零内存泄漏。 - **Druid**:阿里巴巴开源的数据库连接池,集成了监控、日志、...

    ajax、json、dbcp、c3p0操作录像.rar

    这些视频教程很可能是深入讲解如何在实际项目中运用Ajax、Json、Dbcp和C3p0的实战教学,涵盖了从基础知识到高级技巧,对于希望提升Java Web开发技能的人来说非常有价值。通过学习,开发者可以掌握如何利用Ajax创建...

    mysql-connector、c3p0、dbcp 所需jar包

    其次,`c3p0`和`dbcp`是两种常用的数据库连接池实现。数据库连接池在应用服务器启动时预建一些数据库连接,并存储在一个池中。当应用程序需要数据库连接时,可以从池中获取,用完后归还,而不是每次建立新的连接。这...

    JSP数据库连接池的研究与实现(源代码+论文).zip

    3. 常用数据库连接池组件:详细介绍DBCP和C3P0等库的配置和使用方法,包括初始化参数、连接配置、异常处理等。 4. JSP中集成连接池:讲解如何在JSP应用中引入和配置连接池组件,如何在JSP页面或对应的Servlet中获取...

    JSP数据库连接池的研究与实现(源代码+论文).rar

    常见的数据库连接池实现有Apache的DBCP、C3P0,以及更现代的HikariCP等。 本项目中可能涵盖了以下几个关键知识点: 1. **JDBC基础**:首先需要理解Java Database Connectivity (JDBC),它是Java语言访问数据库的...

    dao--4.连接池

    Apache DBCP(Database Connection Pool)是Apache组织提供的一个开源数据库连接池组件。它提供了基本的数据库连接池功能,包括连接验证、池管理等。在提供的文件`dbcp1`和`dbcp2`中,可能包含DBCP不同版本的配置和...

    java 数据库连接池的实现代码

    10. **第三方连接池库**:Java社区有许多成熟的数据库连接池实现,如C3P0、HikariCP、Apache DBCP和Druid等,它们提供了更丰富的功能和更好的性能,是实际项目中更常见的选择。 总的来说,数据库连接池通过有效管理...

    c3p0-0.9.5.1 jar及源码

    在Java应用程序中,数据库连接池扮演着非常重要的角色,它能够有效地管理数据库连接,提高系统性能,减少数据库资源的浪费。C3P0因其稳定性和灵活性,被广泛应用于各种Java Web项目中。 C3P0-0.9.5.1是C3P0的一个...

Global site tag (gtag.js) - Google Analytics