常用數據庫連接池

    1. 數據庫連接池 簡介 實際開發中“獲得連接”或“釋放資源”是非常消耗系統資源的兩個過程,為了解決此類性能問題,通常情況我們 采用連接池技術,來共享連接Connection。這樣我們

    1. 數據庫連接池 簡介

    實際開發中“獲得連接”或“釋放資源”是非常消耗系統資源的兩個過程,為了解決此類性能問題,通常情況我們 采用連接池技術,來共享連接Connection。這樣我們就不需要每次都創建連接、釋放連接了,這些操作都交 給了連接池。

    如何使用連接池:

    Java為數據庫連接池提供了公共的接口:javax.sql.DataSource,各個廠商需要讓自己的連接池實現這個接口。 這樣應用程序可以方便的切換不同的連接池!DBCP、C3P0、Druid 就是幾個常用的連接池。

    2. DBCP連接池

    2.1 簡介

    DBCP是Apache的一個開源的連接池。Tomcat中就內置了該連接池。

    2.2 引入方式

    1. 下載 JAR 包并導入

    首先,從 https://commons.apache.org/proper/commons-dbcp/download_dbcp.cgi 下載dbcp連接池,我這里下載的是 commons-dbcp2-2.8.0-bin.zip 解壓后commons-dbcp2-2.8.0.jar就是所需的文件。

    然而,DBCP連接池有兩個依賴:commons-logging-1.2-bin.zip 和 commons-pool2-2.9.0-bin.zip 下載后解壓出Jar文件。

    獲得 jar 包后開始導入:

    在IDEA中導入 jar 包,可以在項目中創建一個文件夾,然后右鍵點擊文件夾,選擇Add as Library,最后將需要的Jar包(也就是剛剛下載的三個jar包)導入即可。注意:使用了連接池并不會自帶數據庫連接驅動,所以數據庫連接器的 jar 包也要導入。

    注意:

    不同版本的依賴以不同,如 dbcp-1.4 只需要 pool-1.5.6就可以了。這些也不用記,只需要 先下載dbcp的 jar 包并導入執行程序,程序會報NoClassDefFoundError,意思就是執行時發現需要后邊的類,但找不到。

    常用數據庫連接池_bc

    知道卻什么后就可以從官網:https://commons.apache.org/proper/ 找到并下載對應的東西就可以了。

    不得不說,這就逐漸體現出Maven的重要性了。

    2.3 使用

    DBCP中的BasicDateSource,就是 javax.sql.DateSource接口的實現類,創建其對象,對其進行配置,然后就可以通過這個對象獲取數據庫連接(Connection對象)了。以此來代替通過DriverManager獲取連接對象。

    DBCP工具類(使用 setXxx 配置):

    public class DBCPUtils {
        private DBCPUtils(){}
        // 配置的相關信息
        public static final String DRIVERCLASS = "com.mysql.cj.jdbc.Driver";
        public static final String URL = "jdbc:mysql://localhost:3306/lianxi01?characterEncoding=utf-8&serverTimezone=UTC";
        public static final String USERNAME = "root";
        public static final String PASSWORD = "123456";
        private static BasicDataSource ds;
    
        static {
            // 代碼配置法
            ds = new BasicDataSource();
            ds.setDriverClassName(DRIVERCLASS);   // 配置 驅動器名
            ds.setUrl(URL);                       // 配置 數據庫地址
            ds.setUsername(USERNAME);             // 配置 數據庫登錄用戶名
            ds.setPassword(PASSWORD);             // 配置 數據庫登錄密碼
    
            ds.setMaxTotal(20);                   // 相當于DBCP1中的maxActive,表示最多有20條連接  默認:8
            ds.setMaxIdle(10);                    // 最大空閑連接數  默認:8
            ds.setMinIdle(5);                     // 最小空閑連接數  默認:0
            ds.setInitialSize(8);                 // 連接池啟動時創建的初始化連接數量  默認:0
            // 注意: setConnectionProperties()方法要求傳入以分號分割的配置信息字符串,然而測試寫在此處并沒有什么用
            // 所以:使用配置文件時,還是用 工廠類 的方法創建
    
        }
    	// 獲取連接的方法
        public static Connection getConnection(){
            try {
                return ds.getConnection();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return null;
        }
    	// 歸還連接的方法
        public static void close(AutoCloseable c){
            if(null!=c){
                try {
                    c.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }

    DBCP工具類(使用 properties文件 配置):

    public class DBCPUtils {
        private DBCPUtils(){}    
        // 配置文件 的 資源路徑  推薦使用配置文件,耦合性低,符合開閉原則
        public static final String path = "/dbcp.properties";
        private static BasicDataSource ds;
        static {
            // 使用Properties配置文件
            Properties p = new Properties();
            InputStream in = DBCPUtils.class.getResourceAsStream(path);
            try {
                p.load(in);
                ds = BasicDataSourceFactory.createDataSource(p);   // 工廠方法創建數據源
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    	// 獲取連接的方法
        public static Connection getConnection(){
            try {
                return ds.getConnection();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return null;
        }
    	// 歸還連接的方法
        public static void close(AutoCloseable c){
            if(null!=c){
                try {
                    c.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    
    }

    jdbc.properties 文件,放置在src或resource目錄下:

    driverClassName=com.mysql.cj.jdbc.Driver
    url=jdbc:mysql://localhost:3306/lianxi01?characterEncoding=utf-8&serverTimezone=UTC
    username=root
    password=123456
    
    maxTotal=20
    maxIdle=10
    minIdle=5
    initialSize=8

    3. C3P0連接池

    3.1 簡介

    C3P0是一個開源的JDBC連接池,支持JDBC3規范和JDBC2的標準擴展。目前使用它的開源項目有Hibernate、 Spring等。

    3.2 導入 jar 包

    下載網址:https://sourceforge.net/projects/c3p0/

    下載后將其中 lib 目錄下的三個 jar 包全部導入即可:

    常用數據庫連接池_bc_02

    3.3 C3P0配置

    1. 基于 setXxx 配置

    public static ComboPooledDataSource ds;
    static {
        ds = new ComboPooledDataSource();
        try {
            ds.setDriverClass("com.mysql.cj.jdbc.Driver");
            ds.setJdbcUrl("jdbc:mysql://localhost:3306/lianxi01?characterEncoding=utf-8&serverTimezone=UTC");
            ds.setUser("root");
            ds.setPassword("123456");
    
            ds.setInitialPoolSize(3);
            ds.setMaxPoolSize(10);
            ds.setMinPoolSize(3);
            ds.setAcquireIncrement(3);
        } catch (PropertyVetoException e) {
            e.printStackTrace();
        }
    }

    2. 使用配置文件

    配置文件名稱必須為:c3p0-config.xml 內容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <c3p0-config>
        <!--默認配置-->
        <default-config>
            <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql://localhost:3306/lianxi01?characterEncoding=utf-8&serverTimezone=UTC</property>
            <property name="user">root</property>
            <property name="password">123456</property>
            <!-- initialPoolSize:初始化時獲取三個連接,
            取值應在minPoolSize與maxPoolSize之間。 -->
            <property name="initialPoolSize">3</property>
            <!-- maxIdleTime:最大空閑時間,60秒內未使用則連接被丟棄。若為0則永不丟棄。-->
            <property name="maxIdleTime">60</property>
            <!-- maxPoolSize:連接池中保留的最大連接數 -->
            <property name="maxPoolSize">100</property>
            <!-- minPoolSize: 連接池中保留的最小連接數 -->
            <property name="minPoolSize">10</property>
        </default-config>
        <!--配置連接池mysql-->
        <named-config name="mysql">
            <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql://localhost:3306/lianxi01?characterEncoding=utf-8&serverTimezone=UTC</property>
            <property name="user">root</property>
            <property name="password">123456</property>
            <property name="initialPoolSize">10</property>
            <property name="maxIdleTime">30</property>
            <property name="maxPoolSize">100</property>
            <property name="minPoolSize">10</property>
        </named-config>
        <!--配置連接池2,可以配置多個-->
    </c3p0-config>

    注意: jdbcUrl中有多個參數時使用&連接,但XML文件中&是轉義字符,&amp;amp; 才表示 & 字符。

    使用:

    public static ComboPooledDataSource ds = new ComboPooledDataSource("mysql");
    // 這里的 mysql 是配置文件中 named-config 的 name 屬性給定的值。 
    // 不寫參數時表示使用默認配置<default-config>

    3. 常用配置參數

    參數

    含義

    driverClass

    數據庫驅動類

    jdbcUrl

    數據庫連接地址

    user

    登錄 用戶名

    password

    用戶 密碼



    initialPoolSize

    初始化連接數,取值應在minPoolSize與maxPoolSize之間。 默認: 3

    maxIdleTime

    最大空閑時間,多少秒內未使用則連接被丟棄。若為0則永不丟棄。 默認: 0

    maxPoolSize

    最大連接數 默認:15

    minPoolSize

    最小連接數 默認:10

    目前還沒有經歷過需要配置這些的場景,不好深究,等用到了再說吧。

    https://blog.csdn.net/zhanghanlun/article/details/80918422

    4. Druid連接池

    4.1 簡介

    Druid(德魯伊)是阿里巴巴開發的號稱為監控而生的數據庫連接池,Druid是目前最好的數據庫連接池。在功 能、性能、擴展性方面,都超過其他數據庫連接池,同時加入了日志監控,可以很好的監控DB池連接和SQL的執行 情況。

    4.2 導入 jar 包

    下載網址:https://repo1.maven.org/maven2/com/alibaba/druid/ 可能會比較慢。

    下載對應 jar 包,并導入即可。沒有什么依賴。

    4.3 配置使用方式

    可以通過properties文件進行配置,與DBCP的配置方式極其相似。

    Druid工具類:

    import com.alibaba.druid.pool.DruidDataSource;
    import com.alibaba.druid.pool.DruidDataSourceFactory;
    import javax.sql.DataSource;
    import java.io.IOException;
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.SQLException;
    import java.util.Properties;
    
    public class DruidUtils {
        private DruidUtils(){}
        private static DataSource ds;
        // 創建數據源
        static{
            InputStream in = DruidDataSource.class.getResourceAsStream("/dbcp.properties");
            Properties p = new Properties();
            try {
                p.load(in);
                ds = DruidDataSourceFactory.createDataSource(p);
            }catch (Exception e) {
                e.printStackTrace();
            }
        }
        // 獲取連接
        public static Connection getConnection(){
            try {
                return ds.getConnection();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return null;
        }
        // 關閉連接
        public static void close(AutoCloseable c){
            if(null!=c){
                try {
                    c.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }

    配置文件:

    driverClassName=com.mysql.cj.jdbc.Driver
    url=jdbc:mysql://localhost:3306/lianxi01?characterEncoding=utf-8&serverTimezone=UTC
    username=root
    password=123456
    
    initialSize=5     
    maxActive=10
    # 不是使用maxIdle,而是想c3p0一樣指定最長等待時間
    maxWait=3000
    聲明:所有內容來自互聯網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。
    發表評論
    更多 網友評論0 條評論)
    暫無評論

    返回頂部

    主站蜘蛛池模板: 精品国产亚洲一区二区三区在线观看| 无遮挡免费一区二区三区| 69久久精品无码一区二区| 色婷婷一区二区三区四区成人网| 精品无码人妻一区二区三区18| 一本色道久久综合一区| 无码人妻精品一区二区三区久久久| 中文字幕精品亚洲无线码一区| 视频在线一区二区三区| 午夜AV内射一区二区三区红桃视| 免费日本一区二区| 国产一区二区三区在线视頻| 日韩A无码AV一区二区三区 | 白丝爆浆18禁一区二区三区| 亚洲国产日韩在线一区| 久久精品国产一区| 亚洲色精品vr一区二区三区| 久久se精品一区精品二区国产| 一区二区三区在线播放| 日本美女一区二区三区| 国产a久久精品一区二区三区| 精品国产免费观看一区 | 在线观看日韩一区| 老熟妇高潮一区二区三区| 一区二区和激情视频| 国产午夜精品片一区二区三区| 亚洲区精品久久一区二区三区| 文中字幕一区二区三区视频播放| 久久久91精品国产一区二区| 国产成人精品视频一区二区不卡 | 亚洲AV无码一区二区一二区| 亚洲天堂一区二区三区| 亚洲一区精品视频在线| 偷拍激情视频一区二区三区| 精品福利视频一区二区三区| 无码中文字幕一区二区三区| 国产日韩精品一区二区在线观看播放| 加勒比精品久久一区二区三区| 日韩av片无码一区二区三区不卡 | 亚洲av无一区二区三区| 日韩精品一区二区三区国语自制 |