JDBC資料庫連線池實現

尚學堂明輝發表於2017-12-23

資料庫連線池,用池來管理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資料庫連線池相關知識資訊。

相關文章