現在開發的應用程序,基本上都是基于數據的,而且是需要頻繁的連接數據庫的。如果每次操作都連接數據庫,然后關閉,這樣做性能一定會受限。所以,我們一定要想辦法復用數據庫的連接。因此針對這種情況,提出了數據源和連接池的概念。使用數據源和連接池可以達到復用數據庫連接的目的。
二、數據源和連接池概念其實,數據源和連接池是兩個不同的概念。有些人會把它們弄混。數據源是用來連接數據庫,獲得Connection 對象的,在java 中使用javax.sql.DataSource接口來表示。有了數據源,我們就不需要再編寫其他連接數據的代碼,直接從數據源獲得連接就可以了。而且,不管使用什么樣的數據庫,都使用一樣的方式獲得數據庫連接對象。那么數據源的對象是如何獲得的呢?一般是由容器來創建的,我們在程序中使用JNDI 來獲取。通過數據源創建的連接對象可以被自動放入連接池中統一管理
連接池是用來管理Connection 對象的,連接池可以從數據源中獲得連接,連接池中可以有若干個數據庫連接對象,這些連接對象可以被重用。應用程序需要連接時,就向連接池申請,如果連接池中有空閑的連接,就會分配給應用程序,如果沒有,可能就需要在等待隊列里等待。而如果從連接池中獲得了一個連接對象,等到使用完畢之后,通過調用Connection 的close()方法,就可以將連接還給連接池,這樣這個連接對象就又編程空閑的了,可以等待下一次請求。而連接池中的連接對象將一直保持與數據庫的連接,這樣,就避免了頻繁的連接和關閉。但是,這些連接對象會占用一定的內存空間。所以,我們要根據數據庫的并發訪問量,和服務器的硬件條件來決定連接池中的最大連接數。
三、數據源和連接池,一個是用來創建連接對象的,一個是用來管理連接對象的<Context><Resource name="jdbc/books"auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="pbdevj" passWord="pwd1234"driverClassName="Oracle.jdbc.OracleDriver "url="jdbc:oracle:thin:@localhost:1521:orcl "/></Context>
屬性名稱 | 說明 |
name | 指定Resource 的JNDI 名稱 |
auth | 指定管理Resource 的Manager(Container:由容器創建和管理|application:由Web 應用創建和管理) |
type | 指定Resource 所屬的Java 類 |
maxActive | 指定連接池中處于活動狀態的數據庫連接的最大數目 |
maxIdle | 指定連接池中處于空閑狀態的數據庫連接的最大數目 |
maxWait | 指定連接池中的連接處于空閑的最長時間,超過這個時間會拋出異常,取值為-1,表示可以無限期等待 |
import javax.naming.Context;import javax.naming.InitialContext;import javax.sql.DataSource;//…Context ic = new InitialContext();DataSource source = (DataSource)ic.lookup("java:comp/env/jdbc/books");Connection connection = source.getConnection();
新聞熱點
疑難解答