链接池的优缺点html
优势java
使用链接池的最主要的优势是性能。建立一个新的数据库链接所耗费的时间主要取决于网络的速mysql
度以及应用程序和数据库服务器的web
(sql
网络数据库
)tomcat
距离,并且这个过程一般是一个很耗时的过程。而采用服务器
数据库链接池后,数据库链接请求能够直接经过链接池知足而不须要为该请求从新链接、认证到网络
数据库服务器,这样就节省了时间。app
缺点
数据库链接池中可能存在着多个没有被使用的链接一直链接着数据库
(
这意味着资源的浪费
)
。
Apache官网下载DBCP包,导入两个包路径以下:
commons-dbcp-1.4-bin\commons-dbcp-1.4\commons-dbcp-1.4.jar:链接池的实现
commons-pool-1.5.6-bin\commons-pool-1.5.6\commons-pool-1.5.6.jar:链接池实现的依赖库
CSDN上jar包的下载地址:http://download.csdn.net/detail/u012802702/9491642
其中的Close方法是被改写过得,及不会真正的将链接关闭,而是将其放回到链接池中,对于全部的数据源通常都会改写此方法(使用修饰)。
配置文件dbcp.properties(注配置文件中的参数的名称固定):
另:配置文件中除了能够配置以上4个数据库链接的必须信息外,还能够配置其余的参数,官方较完整的配置文件的参考以下:
下载C3p0数据源的jar包导入以下jar包:
Lib\c3p0-0.9.1.2.jar
CDSN的下载地址:http://download.csdn.net/detail/u012802702/9491641
方式二:配置文件的方式加载数据库驱动信息
C3p0的使用较为简单,一般来讲只要在src目录下添加一个c3p0的配置文件,在程序中使用一句代码
1)ComboPooledDataSource source = new ComboPooledDataSource()使用配置文件中的默认配置<default-config>,或者
2)ComboPooledDataSource source = new ComboPooledDataSource(“配置文件中name-config的名称”)使用配置文件中的其余配置
默认状况下C3p0会在类加载路径下搜索名称为c3p0-config.xml的配置文件,所以该配置文件应该方式在类加载目录、或者jar加载目录、或者WEB-INF/classes、或相似目录下。
c3p0-config.xml文件配置以下:
固然在配置文件中能够配置数据库链接池的其余相关信息,官方建议的基本配置参数有:
acquireIncrement:声明当链接池中链接耗尽时再一次新生成多少个链接,默认为3个
initialPoolSize:当链接池启动时,初始化链接的个数,必须在minPoolSize~maxPoolSize之间,默认为3
minPoolSize:任什么时候间链接池中保存的最小链接数,默认3
maxPoolSize:在任什么时候间链接池中所能拥有的最大链接数,默认15
maxIdleTime:超过多长时间链接自动销毁,默认为0,即永远不会自动销毁
C03p0的官方参考模板以下:
Tomcat中内置有数据源,而DBCP与tomcat同属于Apache的项目,所以不难知道tomcat中内置的数据源其实就是DBCP数据源。使用Tomcat的内置数据源可分为两步:
一般状况下,在使用eclipse或Myeclipse开发时,本身习惯于使用以下方式为tomcat配置数据源:
在web应用的META-INF文件夹下建立一个context.xml配置文件,并在其中添加<Context>标签进行配置,但,这种方式生成的数据源只能用于当前web应用.
详细context.xml文件的参考代码以下:
在tomcat启动时,会逐个加载其中的web应用,当其加载到当前应用时,会加载到META-INF文件夹下该context.xml配置文件,此时tomcat会根据其中的配置信息为当前web应用建立一个数据库链接池,注该数据库链接池只能用于当前web应用,tomcat下的其余web应用没法使用该数据库链接池。至于如何配置tomcat的数据库链接池才能使当前tomcat下的全部web应用都能使用,或者能够使当前虚拟主机下的web应用都能使用?请参考其余文章:http://blog.csdn.net/u012802702/article/details/51159547。
当tomcat读取到context.xml配置文件时会为当前web应用建立数据源,但咱们在当前web应用中如何获取该数据源对象?
Tomcat中有一个共有的容器:jndi,当Tomcat为web应用建立数据源以后会将数据源以键值对的形式存放到jndi容器当中,其中键名就是数据源配置时给定的名字(详见context.xml配置文件)。
而Tomcat会自动将jndi容器放到初始化容器InitalContext中。且jndi以固定的名字(java:comp/env)存储在InitalContext容器中,所以在web应用中能够经过以下步骤首先获取到数据源实例。
第一步:首先在Servlet中获取InitalContext容器实例
Context initCtx = new InitialContext();
第二步:在InitalContext容器中根据字符串java:comp/env搜寻,以及获取jndi容器实例
Context jndi = (Context) initCtx.lookup("java:comp/env");
第三部:根据数据源的名字从jndi容器获取到数据源实例。
DataSource source = jndi.lookUp("mySource");
完整参考代码以下:
但到此获取到数据源对象尚未结束,由于获取jndi的代码只能在Servlet中执行,即以上代码只能在Servlet中执行,所以还应建立一个Servlet类并在其init方法中加入以上代码,以后即可以将数据源对象传给其余程序使用(能够将数据源对象设为类变量、或将其放入到ServletContext做用域中等等)。同时将该Servlet配置成为tomcat启动时执行(即在web.xml配置文件中对应的该Servlet标签下添加:<load-on-startup>1</load-on-startup>)。
参考代码以下: