我们应该知道,在进行数据库连接的时候,是极其消耗时间和性能的。如果每次对数据库进行操作,都要进行一次Connection,那么,可想而知,性能有多么的差。你要知道,一个大型的web应用,同一时间就可能有成千上万个访问数据库的请求,并且数据库服务器能供同时创建的Connection数目也是有限的。
因此,问题来了。怎么最大限度的利用这些有限资源呢?
数据库连接池的技术出现,解决了这一问题。连接池技术就是预先创建多个连接对象,保存到连接池中,当有客户请求时,从池中取出一个连接对象为客户服务,当请求完成后,客户程序调用close方法,将连接对象归还给连接池,已备其他客户使用,而不是真正的断开连接。这样就避免了每次请求都创建连接对象所带来的性能开销。
我这里简单的介绍一下常用的连接池技术:DBCP,C3P0,还有阿里的Druid。
1.DBCP
DBCP(DataBase connection pool)数据库连接池。是 Apache 上的一个 Java 连接池项目,也是 tomcat 使用的连接池组件。单独使用DBCP需要2个包:commons-dbcp.jar和commons-pool.jar。由于建立数据库连接是一种非常耗时、耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,使用完毕后再归还到连接池中。数据库连接的释放和断开,由程序自动管理,大大方便了开发人员。
我使用的是dbcp2.0版本以上的jar包,如下:
不管使用哪种连接池技术,原理都是一样的,而常用的配置都是一样的,顶多配置参数的名称不同而已。下面介绍一下dbcp2.0版本以上的常用的配置参数(配置信息是写在src下的db.properties中的形式)
#要连接的数据库的driverClassName
driverClassName=com.mysql.jdbc.Driver
#要传递给JDBC驱动程序以建立连接的连接URL。
url=jdbc:mysql://localhost:3306/db_test
#要传递给JDBC驱动程序以建立连接的连接用户。
username=root
#要传递给JDBC驱动程序以建立连接的连接密码。
password=mmforu
#同时从这个池中分配的活动连接的最大数量,或者为负,没有限制。dbcp1