JDBC 數(shù)據(jù)庫連接池

基本思想

  • 為數(shù)據(jù)庫連接建立一個(gè)“緩沖池”。預(yù)先在緩沖池中放入一定數(shù)量的連接,當(dāng)需要建立數(shù)據(jù)庫連接時(shí),只需從“緩沖池”中取出一個(gè),使用完畢之后再放回去。
  • 數(shù)據(jù)庫連接池負(fù)責(zé)分配、管理和釋放數(shù)據(jù)庫連接,它允許應(yīng)用程序重復(fù)使用一個(gè)現(xiàn)有的數(shù)據(jù)庫連接,而不是重新建立一個(gè)。
  • 最小數(shù)據(jù)庫連接數(shù):數(shù)據(jù)庫連接池在初始化時(shí)將創(chuàng)建一定數(shù)量的數(shù)據(jù)庫連接放到連接池中,無論這些數(shù)據(jù)庫連接是否被使用,連接池都將一直保證至少擁有這么多的連接數(shù)量。
  • 最大數(shù)據(jù)庫連接數(shù):限定了這個(gè)連接池能占有的最大連接數(shù),當(dāng)應(yīng)用程序向連接池請(qǐng)求的連接數(shù)超過最大連接數(shù)量時(shí),這些請(qǐng)求將被加入到等待隊(duì)列中。
數(shù)據(jù)庫連接池工作原理

優(yōu)點(diǎn)

  • 資源重用
    由于數(shù)據(jù)庫連接得以重用,避免了頻繁創(chuàng)建,釋放連接引起的大量性能開銷。在減少系統(tǒng)消耗的基礎(chǔ)上,另一方面也增加了系統(tǒng)運(yùn)行環(huán)境的平穩(wěn)性。
  • 更快的系統(tǒng)反應(yīng)速度
    數(shù)據(jù)庫連接池在初始化過程中,往往已經(jīng)創(chuàng)建了若干數(shù)據(jù)庫連接置于連接池中備用。此時(shí)連接的初始化工作均已完成。對(duì)于業(yè)務(wù)請(qǐng)求處理而言,直接利用現(xiàn)有可用連接,避免了數(shù)據(jù)庫連接初始化和釋放過程的時(shí)間開銷,從而減少了系統(tǒng)的響應(yīng)時(shí)間
  • 新的資源分配手段
    對(duì)于多應(yīng)用共享同一數(shù)據(jù)庫的系統(tǒng)而言,可在應(yīng)用層通過數(shù)據(jù)庫連接池的配置,實(shí)現(xiàn)某一應(yīng)用最大可用數(shù)據(jù)庫連接數(shù)的限制,避免某一應(yīng)用獨(dú)占所有的數(shù)據(jù)庫資源
  • 統(tǒng)一的連接管理,避免數(shù)據(jù)庫連接泄露
    在較為完善的數(shù)據(jù)庫連接池實(shí)現(xiàn)中,可根據(jù)預(yù)先的占用超時(shí)設(shè)定,強(qiáng)制回收被占用連接,從而避免了常規(guī)數(shù)據(jù)庫連接操作中可能出現(xiàn)的資源泄露

使用DBCP連接池

1.直接連接

    // 1.創(chuàng)建DBPC數(shù)據(jù)源實(shí)例
    BasicDataSource bds = null;
    bds = new BasicDataSource();

    // 2.設(shè)置數(shù)據(jù)庫連接使用
    bds.setUsername("root");
    bds.setPassword("root");
    bds.setUrl("jdbc:mysql://127.0.0.1:3306/test1");
    bds.setDriverClassName("com.mysql.jdbc.Driver");

    // 3.指定數(shù)據(jù)庫連接池屬性
    // 3.1.設(shè)置初始連接數(shù)
    bds.setInitialSize(10);

    // 3.2.指定最大連接數(shù),同一時(shí)刻向數(shù)據(jù)庫申請(qǐng)的鏈接數(shù)和空閑的最大數(shù)
    bds.setMaxTotal(50);

    // 3.3.指定最小鏈接數(shù):在數(shù)據(jù)庫連接池中保存的最小的空閑連接的數(shù)量
    bds.setMinIdle(5);

    // 3.4.等待分配連接的最長時(shí)間,單位毫秒,超出則報(bào)異常
    bds.setMaxWaitMillis(1000 * 5);
    
    //4.從數(shù)據(jù)庫獲取連接
    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();

注:數(shù)據(jù)庫連接池初始化一次
private static DataSource dataSource = null;
static { dataSource = BasicDataSourceFactory.createDataSource(properties);}
conn關(guān)閉時(shí)并不是真的關(guān)閉,而是歸還給數(shù)據(jù)庫連接池

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • DriverManager的實(shí)現(xiàn)方式一般是在主程序中建立數(shù)據(jù)庫的連接,然后進(jìn)行數(shù)據(jù)庫的操作,操作完畢后斷開數(shù)據(jù)庫連...
    怪蜀黍Zzzzlw閱讀 2,070評(píng)論 0 9
  • 聲明:本欄目所使用的素材都是凱哥學(xué)堂VIP學(xué)員所寫,學(xué)員有權(quán)匿名,對(duì)文章有最終解釋權(quán);凱哥學(xué)堂旨在促進(jìn)VIP學(xué)員互...
    凱哥學(xué)堂閱讀 347評(píng)論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,569評(píng)論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,275評(píng)論 6 342
  • JDBC概述 在Java中,數(shù)據(jù)庫存取技術(shù)可分為如下幾類:JDBC直接訪問數(shù)據(jù)庫、JDO技術(shù)、第三方O/R工具,如...
    usopp閱讀 3,640評(píng)論 3 75

友情鏈接更多精彩內(nèi)容