數據庫連接池的解決方案是在應用程序啟動時建立足夠的數據庫連接,并將這些連接組成一個連接池,由應用程序動態的對池中的連接進行申請,使用和釋放。
? 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>