数据库连接池的解决方案是在应用程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由应用程序动态的对池中的连接进行申请,使用和释放。
JDBC 3.0规范中提供了一个支持数据库连接池的框架,这个框架仅仅规定了如何支持连接池的实现,而连接池的具体实现JDBC 3.0规范并没有做相关的规定。
JDBC 3.0规范定义了如下的类和接口来支持数据库连接池的实现。
● javax.sql.ConnectionEvent: 连接事件
● javax.sql.ConnectionPoolDataSource: 连接池数据源
● javax.sql.PooledConnection: 被池化的连接
●javax.sql.ConnectionEventListener: 连接事件监听接口
DataSource接口代表了数据源,它一般由数据库驱动厂商实现。通过这个接口来获得一个连接,它的主要方法如下:
★ getConnection(): 获得一个Connection物件
★ getConnection(String username,String password): 获得一个Connection物件
★getLongWriter(): 从DataSource获得Long Writer对象,它是Print Writer的实现
★setLogWriter(PrintWriter out):设置DataSource的LogWriter
★setLoginTime():获得DataSource尝试连接数据库的最大时间
★setLoginTimeout(int seconds): 设置DataSource尝试连接数据的最大时间
如下是在Tomcat 5中配置数据源:
在Tomcat的%Tomcat_Home%/conf/server.xml里的</Context></Host>前增加如下的描述:
<Context path="/MyRoot" docBase="MyRoot" debug="0"
reloadable="true" crossContext="true">
<Resource name="jdbc/bn" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/bn">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>username</name>
<value>bn</value>
</parameter>
<parameter>
<name>password</name>
<value>bn</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>20</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>10</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>-1</value>
</parameter>
</ResourceParams>
</Context>