JDBC_4データベース接続プール

データベース接続プール


JDBCデータベース接続プールの必要性
データベースベースのWebプログラムを使用および開発する場合、従来のモデルは基本的に次の手順に従います。

  1. メインプログラム(サーブレットBeanなど)でデータベース接続を確立します
  2. SQL操作を実行します
  3. データベース接続を切断します

この開発モードの問題:

  • 通常のJDBCデータベース接続は、DriverManagerを使用して取得されます。データベースへの接続が確立されるたびに、接続をメモリにロードし、ユーザー名とパスワードを確認する必要があります(約0.05s-1s)。必須の場合、データベースは1つを要求し、実行が完了した後に切断します。この方法は多くの時間を消費します。データベースの接続リソースは十分に活用されていません。
  • データベース接続ごとに、使用後に切断する必要があります。そうしないと、プログラムが異常のために閉じられない場合、データベースシステムでメモリリークが発生し、最終的にデータベースが再起動されます。
  • この種の開発では、作成される接続オブジェクトの数を制御できず、システムリソースが無謀に割り当てられます。接続が多すぎると、メモリリークやサーバーのクラッシュが発生する可能性もあります。

データベース接続プールテクノロジの
基本的な考え方データベース接続用の「バッファプール」を確立します。事前に一定数の接続をバッ​​ファプールに入れておきます。データベース接続を確立する必要がある場合は、「バッファプール」から1つを取り出して、使用後に元に戻すだけです。
データベース接続プールは、データベース接続の割り当て、管理、および解放を担当します。これにより、アプリケーションは既存のデータベース接続を再確立する代わりに使用できます。

JDBCデータベース接続プールは、単なるインターフェイスであるDataSourceで表されます。このインターフェースは通常サーバーによって実装され、一部のオープンソース組織が実装を提供します。

データベース接続プールの利点
ここに画像の説明を挿入


DBCP C3P0 Druidは、主要な3つのデータベース接続プールテクノロジーです。


c3p0

package com.atguigu4.connection;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.mchange.v2.c3p0.DataSources;
import org.junit.Test;

import java.sql.Connection;

public class C3P0Test {
    
    
    @Test
    public void testGetConnection() throws Exception{
    
    
        //获取c3p0数据库连接池
        ComboPooledDataSource cpds = new ComboPooledDataSource();
        cpds.setDriverClass("com.mysql.jdbc.Driver");
        cpds.setJdbcUrl("jdbc:mysql://localhost:3306/test");
        cpds.setUser("root");
        cpds.setPassword("924930871111");
        //设置初始时数据库连接池中的连接数
        cpds.setInitialPoolSize(10);

        Connection connection = cpds.getConnection();
        System.out.println(connection);
        //销毁c3p0连接池
        DataSources.destroy(cpds);
    }
}

構成ファイル


    <!-- 配置c3p0的基本信息 -->
    <named-config name="helloc3p0">
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb1</property>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="user">root</property>
        <property name="password">123</property>
        <!--当数据库连接池中的连接数不够时,c3p0一次性向数据库服务器申请的连接数-->
        <property name="acquireIncrement">3</property>
        <!--c3p0初始化时的连接数-->
        <property name="initialPoolSize">10</property>
        <property name="minPoolSize">2</property>
        <property name="maxPoolSize">10</property>
        <!--连接池最多维护的Statement个数-->
        <property name="maxStatements">50</property>
        <!--每个连接中最多可以使用的Statement的个数-->
        <property name="maxStatementsPerConnection">2</property>
    </named-config>

おすすめ

転載: blog.csdn.net/m0_46656833/article/details/112545029