基本思想
- 為數據庫連接建立一個“緩沖池”。預先在緩沖池中放入一定數量的連接,當需要建立數據庫連接時,只需從“緩沖池”中取出一個,使用完畢之后再放回去。
- 數據庫連接池負責分配、管理和釋放數據庫連接,它允許應用程序重復使用一個現有的數據庫連接,而不是重新建立一個。
- 最小數據庫連接數:數據庫連接池在初始化時將創建一定數量的數據庫連接放到連接池中,無論這些數據庫連接是否被使用,連接池都將一直保證至少擁有這么多的連接數量。
- 最大數據庫連接數:限定了這個連接池能占有的最大連接數,當應用程序向連接池請求的連接數超過最大連接數量時,這些請求將被加入到等待隊列中。
數據庫連接池工作原理
優點
- 資源重用
由于數據庫連接得以重用,避免了頻繁創建,釋放連接引起的大量性能開銷。在減少系統消耗的基礎上,另一方面也增加了系統運行環境的平穩性。 - 更快的系統反應速度
數據庫連接池在初始化過程中,往往已經創建了若干數據庫連接置于連接池中備用。此時連接的初始化工作均已完成。對于業務請求處理而言,直接利用現有可用連接,避免了數據庫連接初始化和釋放過程的時間開銷,從而減少了系統的響應時間 - 新的資源分配手段
對于多應用共享同一數據庫的系統而言,可在應用層通過數據庫連接池的配置,實現某一應用最大可用數據庫連接數的限制,避免某一應用獨占所有的數據庫資源 - 統一的連接管理,避免數據庫連接泄露
在較為完善的數據庫連接池實現中,可根據預先的占用超時設定,強制回收被占用連接,從而避免了常規數據庫連接操作中可能出現的資源泄露
使用DBCP連接池
1.直接連接
// 1.創建DBPC數據源實例
BasicDataSource bds = null;
bds = new BasicDataSource();
// 2.設置數據庫連接使用
bds.setUsername("root");
bds.setPassword("root");
bds.setUrl("jdbc:mysql://127.0.0.1:3306/test1");
bds.setDriverClassName("com.mysql.jdbc.Driver");
// 3.指定數據庫連接池屬性
// 3.1.設置初始連接數
bds.setInitialSize(10);
// 3.2.指定最大連接數,同一時刻向數據庫申請的鏈接數和空閑的最大數
bds.setMaxTotal(50);
// 3.3.指定最小鏈接數:在數據庫連接池中保存的最小的空閑連接的數量
bds.setMinIdle(5);
// 3.4.等待分配連接的最長時間,單位毫秒,超出則報異常
bds.setMaxWaitMillis(1000 * 5);
//4.從數據庫獲取連接
Connection conn = bds.getConnection();
2.工廠方式連接
String fileName = "dbcp.properties";
Properties properties = new Properties();
InputStream is = JDBCtest.class.getClassLoader().getResourceAsStream(fileName);
properties.load(is);
BasicDataSource bds = BasicDataSourceFactory.createDataSource(properties);
Connection conn = bds.getConnection();
注:數據庫連接池初始化一次
private static DataSource dataSource = null;
static { dataSource = BasicDataSourceFactory.createDataSource(properties);}
conn關閉時并不是真的關閉,而是歸還給數據庫連接池