數(shù)據(jù)庫連接池的解決方案是在應(yīng)用程序啟動時建立足夠的數(shù)據(jù)庫連接,并將這些連接組成一個連接池,由應(yīng)用程序動態(tài)的對池中的連接進(jìn)行申請,使用和釋放。
? JDBC 3.0規(guī)范中提供了一個支持?jǐn)?shù)據(jù)庫連接池的框架,這個框架僅僅規(guī)定了如何支持連接池的實(shí)現(xiàn),而連接池的具體實(shí)現(xiàn)JDBC 3.0規(guī)范并沒有做相關(guān)的規(guī)定。
? JDBC 3.0規(guī)范定義了如下的類和接口來支持?jǐn)?shù)據(jù)庫連接池的實(shí)現(xiàn)。
?● javax.sql.ConnectionEvent: 連接事件
?● javax.sql.ConnectionPoolDataSource: 連接池?cái)?shù)據(jù)源
● javax.sql.PooledConnection: 被池化的連接
●javax.sql.ConnectionEventListener: 連接事件監(jiān)聽接口
?? DataSource接口代表了數(shù)據(jù)源,它一般由數(shù)據(jù)庫驅(qū)動廠商實(shí)現(xiàn)。通過這個接口來獲得一個連接,它的主要方法如下:
?★ getConnection(): 獲得一個Connection物件
★ getConnection(String username,String password): 獲得一個Connection物件
★getLongWriter(): 從DataSource獲得Long Writer對象,它是Print Writer的實(shí)現(xiàn)
★setLogWriter(PrintWriter out):設(shè)置DataSource的LogWriter
★setLoginTime():獲得DataSource嘗試連接數(shù)據(jù)庫的最大時間
★setLoginTimeout(int seconds): 設(shè)置DataSource嘗試連接數(shù)據(jù)的最大時間
如下是在Tomcat 5中配置數(shù)據(jù)源:
?? 在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>