標籤:java web 資料庫連接池
池參數(所有池參數都有預設值):
初始大小:10個
最小空閑串連數:3個
增量:一次建立的最小單位(5個)
最大空閑串連數:12個
最大串連數:20個
最大的等待時間:1000毫秒
四大串連參數
串連池也是使用四大串連參數來完成建立連線物件!
實現的介面
串連池必須實現:javax.sql.DataSource介面!
串連池返回的Connection對象,它的close()方法與眾不同!調用它的close()不是關閉,而是把串連歸還給池!
1 資料庫連接池的概念
用池來管理Connection,這可以重複使用Connection。有了池,所以我們就不用自己來建立Connection,而是通過池來擷取Connection對象。當使用完Connection後,調用Connection的close()方法也不會真的關閉Connection,而是把Connection“歸還”給池。池就可以再利用這個Connection對象了。
2 JDBC資料庫連接池介面(DataSource)
Java為資料庫連接池提供了公用的介面:javax.sql.DataSource,各個廠商可以讓自己的串連池實現這個介面。這樣應用程式可以方便的切換不同廠商的串連池!
3 自訂串連池(ItcastPool)
分析:ItcastPool需要有一個List,用來儲存連線物件。在ItcastPool的構造器中建立5個連線物件放到List中!當用人調用了ItcastPool的getConnection()時,那麼就從List拿出一個返回。當List中沒有串連可用時,拋出異常。
我們需要對Connection的close()方法進行增強,所以我們需要自訂ItcastConnection類,對Connection進行裝飾!即對close()方法進行增強。因為需要在調用close()方法時把串連“歸還”給池,所以ItcastConnection類需要擁有池對象的引用,並且池類還要提供“歸還”的方法。
public class ItcastPool implements DataSource {private static Properties props = new Properties();private List<Connection> list = new ArrayList<Connection>();static {InputStream in = ItcastPool.class.getClassLoader().getResourceAsStream("dbconfig.properties");try {props.load(in);Class.forName(props.getProperty("driverClassName"));} catch (Exception e) {throw new RuntimeException(e);}}public ItcastPool() throws SQLException {for (int i = 0; i < 5; i++) {Connection con = DriverManager.getConnection(props.getProperty("url"), props.getProperty("username"),props.getProperty("password"));ItcastConnection conWapper = new ItcastConnection(con, this);list.add(conWapper);}}public void add(Connection con) {list.add(con);}public Connection getConnection() throws SQLException {if(list.size() > 0) {return list.remove(0);}throw new SQLException("沒串連了");} ......}
public class ItcastConnection extends ConnectionWrapper {private ItcastPool pool;public ItcastConnection(Connection con, ItcastPool pool) {super(con);this.pool = pool;}@Overridepublic void close() throws SQLException {pool.add(this);}}
Java web----資料庫連接池