• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    Java數(shù)據(jù)庫連接池的原理與應用

    2020-04-22 20:37:20劉翠霞
    無線互聯(lián)科技 2020年4期

    劉翠霞

    摘? ?要:在Java開發(fā)中,不可避免地要使用數(shù)據(jù)庫來存儲和管理數(shù)據(jù)。尤其是在Java Web應用程序中,往往會有很多用戶同時連接和訪問數(shù)據(jù)庫,對數(shù)據(jù)庫連接的管理將直接影響到程序的性能和用戶的體驗。使用數(shù)據(jù)庫連接池能夠加快數(shù)據(jù)庫連接的速度,提高服務器程序的性能,降低系統(tǒng)資源的消耗,是對數(shù)據(jù)庫連接的一種較為有效的管理手段。文章介紹了數(shù)據(jù)庫連接池的原理與使用方法。

    關鍵詞:Java;Java數(shù)據(jù)庫連接;數(shù)據(jù)庫連接池

    數(shù)據(jù)庫(Database)是按照數(shù)據(jù)結構來組織、存儲和管理數(shù)據(jù)的倉庫,在Java開發(fā)中,不可避免地要使用數(shù)據(jù)庫來存儲和管理數(shù)據(jù)。傳統(tǒng)的數(shù)據(jù)庫連接是使用Java數(shù)據(jù)庫連接(Java Database Connectivity,JDBC)技術,每操作一次數(shù)據(jù)庫都會執(zhí)行一次創(chuàng)建和斷開連接的操作,這種頻繁的操作十分影響數(shù)據(jù)庫的訪問效率,并且增加了代碼量,所以在實際開發(fā)中通常會使用連接池技術來解決這些問題。

    1? ? 數(shù)據(jù)庫連接池的工作原理

    數(shù)據(jù)庫連接池(Database Connection Pool,DBCP)是應用程序啟動時系統(tǒng)建立足夠的數(shù)據(jù)庫連接,并將這些連接組成一個連接池。每次應用程序請求數(shù)據(jù)庫連接時,無需新建連接,而是從連接池中取出已有的連接使用,使用完畢后,不必關閉數(shù)據(jù)庫連接,而是直接將連接歸還給連接池。這樣雖然會占用一定的內(nèi)存空間,但是卻大大節(jié)省了數(shù)據(jù)庫連接的時間,體現(xiàn)了以空間換時間的思想。數(shù)據(jù)庫連接池的工作原理主要由以下3部分組成。

    1.1? 建立連接池

    在系統(tǒng)初始化時,利用Vector,Stack等容器建立靜態(tài)的數(shù)據(jù)庫連接池,根據(jù)配置創(chuàng)建連接并放置在連接池中,這些連接是不能隨意關閉的,以后所使用的連接都是從該連接池中獲取的,這樣就可以避免反復建立和關閉連接造成的開銷。

    1.2? 分配、釋放連接

    連接池中的連接由連接池管理器統(tǒng)一管理。當客戶請求數(shù)據(jù)庫連接時,首先看連接池中是否有空閑連接,即尚未分配出去的連接。如果存在空閑連接,則把該連接分配給客戶,并標記該連接為已分配。若連接池中沒有空閑連接,就在已經(jīng)分配出去的連接中尋找一個合適的連接給客戶,此時該連接在多個客戶間復用。

    當客戶釋放連接時,可以根據(jù)該連接是否被復用進行不同的處理。如果沒有其他使用者,就放入到連接池中,而不是被關閉。如果有其他使用者,則當前客戶釋放該連接,其他客戶可以繼續(xù)使用。

    1.3? 配置連接

    連接池中到底要放置多少個連接,以及連接耗盡后該如何處理是配置策略要關注的問題。一般的配置策略是,開始時,根據(jù)具體的應用需求,給出一個初始的連接池中連接的數(shù)目以及一個連接池可以擴張到的最大連接數(shù)目。連接池管理器在創(chuàng)建、分配、釋放連接時都需要符合配置要求,當客戶請求超過最大連接數(shù)目時,新請求可能需要一個短暫的等待過程。

    2? ? 數(shù)據(jù)庫連接池的使用(以DBCP連接池為例)

    主流的數(shù)據(jù)庫連接池有DBCP,C3p0,Tomcat Jdbc Pool,BoneCP,Druid。其中,DBCP是apache上的一個Java連接池項目。下面以DBCP連接池為例說明數(shù)據(jù)庫連接池的使用[1]。

    2.1? 導入jar包

    單獨使用DBCP需要導入2個包:commons-dbcp.jar,commons-pool.jar,如果是Maven項目則需要配置Maven依賴,即在配置文件pom.xml中引入其jar包的坐標。

    2.2? 創(chuàng)建數(shù)據(jù)源

    當使用DBCP數(shù)據(jù)源時,首先要創(chuàng)建數(shù)據(jù)源對象,常用的創(chuàng)建方式有兩種。

    2.2.1? 純Java代碼方式

    第一步:創(chuàng)建BasicDataSource類對象

    BasicDataSource datasource=new BasicDataSource();

    第二步:設置必須的數(shù)據(jù)庫連接參數(shù)

    datasource.setDriverClassName(“com.mysql.jdbc.Driver”);

    datasource.setUrl(“jdbc:mysql://127.0.0.1:3306/XXX”); //XXX為數(shù)據(jù)庫的名字

    datasource.setUsername(“root”);

    datasource.setPassword(“root”);

    第三步:設置可選的數(shù)據(jù)庫連接策略參數(shù)

    datasource.setInitialSize(10);//初始化的連接數(shù)

    datasource.setMaxActive(50);//最大連接數(shù)

    datasource.setMaxIdle(5);//最大空閑數(shù)

    datasource.setMinIdle(1);//最小空閑數(shù)

    2.2.2? 基于Spring創(chuàng)建

    第一步:編寫配置文件。配置文件名以.properties結尾,最好放在src目錄下。配置文件信息如下:

    driverClassName=com.mysql.jdbc.Driver

    url=jdbc:mysql://127.0.0.1:3306/shop

    username=root

    password=root

    第二步:在spring配置文件中配置DBCP數(shù)據(jù)源。配置文件信息如下:

    2.3? 通過連接池獲取連接操作數(shù)據(jù)庫

    Connection conn= dataSource.getConnection();//獲取數(shù)據(jù)庫連接對象

    ……//完成數(shù)據(jù)庫的增刪改查操作

    3? ? 數(shù)據(jù)庫連接池技術的優(yōu)勢

    3.1? 資源復用

    使用數(shù)據(jù)庫連接池能夠復用有限的連接資源,避免了頻繁創(chuàng)建和釋放連接引起的大量性能開銷。在減少系統(tǒng)消耗的同時減少內(nèi)存碎片以及數(shù)據(jù)庫臨時進程/線程的數(shù)量,增進了系統(tǒng)運行環(huán)境的平穩(wěn)性。

    3.2? 系統(tǒng)響應速度更快

    數(shù)據(jù)庫連接的初始化工作在數(shù)據(jù)庫連接池初始化時已經(jīng)完成,客戶在訪問數(shù)據(jù)庫時不需要再做初始化工作,直接取得連接即可訪問。對于業(yè)務請求處理而言,節(jié)約了數(shù)據(jù)庫連接初始化和釋放過程的時間開銷,從而縮短了系統(tǒng)整體響應時間,優(yōu)化了用戶體驗。

    3.3? 資源分配手段更新

    對于多應用共享同一數(shù)據(jù)庫的Web系統(tǒng)而言,使用數(shù)據(jù)庫連接池技術,通過在應用層配置數(shù)據(jù)庫連接,限制某一應用最多可以使用的數(shù)據(jù)庫連接數(shù),避免某一應用獨占所有數(shù)據(jù)庫資源,優(yōu)化了資源分配,保障多個應用的可用性。

    3.4? 避免數(shù)據(jù)庫連接泄漏

    使用數(shù)據(jù)庫連接池技術,可根據(jù)預先設定的連接占用時限,把超時連接強制收回,從而避免了常規(guī)JDBC操作中由于沒有及時關閉連接而可能出現(xiàn)的資源泄漏,提高了數(shù)據(jù)庫的安全性。

    4? ? 結語

    數(shù)據(jù)庫是后端系統(tǒng)最重要的存儲組件,無論是C/S架構項目還是B/S架構項目一般都需要把業(yè)務數(shù)據(jù)存儲在數(shù)據(jù)庫中,都需要有數(shù)據(jù)庫存儲和連接技術的支持。使用數(shù)據(jù)庫連接池技術,系統(tǒng)啟動時會預先創(chuàng)建多個數(shù)據(jù)庫連接對象,這樣雖然會占用一定的內(nèi)存空間,但是可以省去后面每次操作數(shù)據(jù)庫時創(chuàng)建連接和關閉連接消耗的時間,是值得推廣使用的技術。隨著項目需求越來越復雜,數(shù)據(jù)量越來越大,如何有效地提高數(shù)據(jù)庫操作性能成為一個重要的研究課題,數(shù)據(jù)庫連接技術還需要進行深入研究。

    [參考文獻]

    [1]黑馬程序員.Java Web程序設計任務教程[M].北京:人民郵電出版社,2017.

    陕西省| 涞水县| 和田市| 洮南市| 平舆县| 商水县| 敦煌市| 吴江市| 阳朔县| 隆化县| 安福县| 榆社县| 洛宁县| 甘泉县| 县级市| 昌吉市| 富阳市| 武城县| 永善县| 衡阳县| 铁岭县| 乡宁县| 保定市| 保靖县| 湖南省| 宁陕县| 清苑县| 双峰县| 宁陵县| 沂南县| 桦甸市| 海淀区| 伊宁县| 江安县| 滕州市| 响水县| 台南市| 永州市| 高淳县| 榆林市| 徐州市|