資料庫連線池,用池來管理Connection,這可以重複使用Connection。有了池,所以我們就不用自己來建立Connection,而是通過池來獲取Connection物件。當使用完Connection後,呼叫Connection的close()方法也不會真的關閉Connection,而是把Connection“歸還”給池。池就可以再利用這個Connection物件了。這個池要等到Web伺服器停止,或應用程式徹底結束時,才會直正銷燬。池銷燬之前,池會讓池中每個Connection物件呼叫close()方法來關閉自己。
編寫標準的資料來源
自定義資料庫連線池要實現javax.sql.DataSource介面,一般都叫資料來源。
市場上流行的JDBC資料庫連線池實現:
1.DBCP(早期)
2.C3P0(今)
DBCP
DBCP:Apache推出的Database Connection Pool
使用步驟:
1、新增jar包 commons-dbcp-1.4.jar commons-pool-1.5.6.jar commons-collections.jar mysql-connector-java-5.1.7-bin.jar
2、新增屬性資原始檔
3、編寫資料來源工具類
/**
* DBCP資料庫連線池的使用
*/
public class Demo01 {
private static BasicDataSource basicDataSource = new BasicDataSource();
static{
//設定資料庫連線池基本屬性
basicDataSource.setDriverClassName("com.mysql.jdbc.Driver");
basicDataSource.setUrl("jdbc:mysql://127.0.0.1:3306/jdbc");
basicDataSource.setUsername("root");
basicDataSource.setPassword("123");
//設定資料庫連線池擴充套件屬性
basicDataSource.setInitialSize(10);
basicDataSource.setMaxActive(10);
basicDataSource.setMaxIdle(5);
}
/**
* 獲取資料庫連線
*/
public Connection getConnection() throws SQLException{
try {
return basicDataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
throw e;
}
}
}
DBCP的配置:
//基本配置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbc
username=root
password=root
//初始化池大小,即一開始池中就會有10個連線物件,預設值為0
initialSize=0
//最大連線數
maxActive=8
//最大空閒連線
maxIdle=8
//最小空閒連線,預設值為0
minIdle=0
//最大等待時間,預設值為-1,表示無限期等待,不會丟擲異常。
maxWait=-1
//連線的預設提交方式,預設值為true
defaultAutoCommit=true
//連線是否為只讀連線,如果沒有指定這個屬性值,那麼是否為只讀連線,這就由驅動自己來決定了。即Connection的實現類自己來決定!
defaultReadOnly=true
//指定事務的事務隔離級別
可選值:NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
如果沒有指定,那麼由驅動中的Connection實現類自己來決定
defaultTransactionIsolation=REPEATABLE_READ
C3P0
C3P0也是開源免費的連線池!實現類:ComboPooledDataSource
使用步驟:
1、新增jar包,匯入 c3p0-0.9.1.2.jar
mysql-connector-java-5.1.7-bin.jar
2、編寫配置檔案c3p0-config.xml,c3p0的配置檔名必須為c3p0-config.xml,並且必須放在src路徑下。
3、編寫工具類
/**
* C3P0資料庫連線池的使用方式
*/
public class Demo{
/**
* 自動載入/src/c3p0-config.xml檔案
*/
private static ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource("oracle-config");
/**
* 獲取資料庫連線
*/
public Connection getConnection() throws SQLException{
try {
return comboPooledDataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
throw e;
}
}
}
歡迎閱讀上海尚學堂《用java實現JDBC資料庫連線池》,獲得更多有關JDBC資料庫連線池相關知識資訊。