常用數據庫連接池

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 條評論)
暫無評論

返回頂部

主站蜘蛛池模板: 国产精品区一区二区三在线播放| 打开腿我想亲亲你下面视频| 国产人妖系列在线精品| 久久丫精品久久丫| 网站视频大片www| 妓女嫖客叫床粗话对白| 亚洲精品在线观看视频| 亚洲AV无码一区二区三区网址 | 久久久噜久噜久久gif动图| 美女黄色毛片免费看| 日韩欧美国产中文字幕| 国产精品青青青高清在线| 亚洲另类图片另类电影| 鲁啊鲁在线观看| 成年丰满熟妇午夜免费视频| 伊人久久大香线蕉亚洲五月天| 2021麻豆剧果冻传媒入口永久 | 精品国产欧美sv在线观看| 大狠狠大臿蕉香蕉大视频| 亚洲国产欧美国产综合一区| 韩国一级毛片完整高清| 尹人香蕉久久99天天拍久女久| 亚洲精品无码人妻无码| 成人午夜性视频欧美成人| 我的初次内射欧美成人影视| 亚洲综合在线成人一区| 国产性夜夜夜春夜夜爽| 性色爽爱性色爽爱网站| 亚洲熟女综合一区二区三区| 成人黄色免费网站| 宅男噜66免费看网站| 亚洲国产综合在线| 色婷婷丁香六月| 大香焦伊人久久| 亚洲1区1区3区4区产品乱码芒果| 美女一级毛片视频| 国产精品无码久久综合网| 久久99精品久久久久久清纯| 污污的文章让人起反应的| 国产免费久久精品| 99福利视频导航|