MavenプロジェクトcityFileFK03データベース接続プール接続(DBCP)

データベース接続プール

1.データベース接続プールとJDBCの比較

接続プールはデータベースのテクノロジーです
。JDBCはユーザーリクエストごとに新しい接続オブジェクトを作成し、使用後にユーザーキャンセルします。複数のユーザーが同時にアクセスすると、接続オブジェクトが頻繁に作成および破棄され、メモリは破棄されました。
接続プールの初期化中に、バッチが初期化されます。データベース接続オブジェクトは、接続オブジェクトの再利用を実現するために使い果たされると、接続プールに返されます。接続オブジェクトの新しいバッチを作成するだけでは不十分です。接続の最大数に達したら、要求が解放されて接続プールに返されるのを待ちます

2.データベース接続プールの使用

2.1ガイドパッケージ

Maven Webサイトにアクセスして、必要な接続プールを検索し、コードをコピーして、プロジェクトのpom.xmlファイルにアクセスして依存関係をインポートします。

ここに画像の説明を挿入

2.2使用

2.2.1db.propertiesの構成

db.propertiesで初期容量と最大容量を増やします

initSize = p.getProperty("db.initSize");
maxSize = p.getProperty("db.maxSize");

リソースディレクトリのdb.properties

db.username=root
db.password=123456
db.url=jdbc:mysql://localhost:3306/citylifefk?characterEncoding=utf8&serverTimezone=UTC
db.driver=com.mysql.jdbc.Driver
db.initSize = 25
db.maxSize = 50

2.2.2utilディレクトリのDBUtilクラス

6つの静的変数を定義し、データを1回ロードしてデータを共有します

    private static  String username;
    private static  String password;
    private static  String url;
    private static  String driver;
    private static String initSize;
    private static String maxSize

接続プールオブジェクトを作成する

private static BasicDataSource basicDataSource;

静的ブロックコンテンツ:

			static {
    
    

        try {
    
    
            InputStream in = DBUtil.class.getClassLoader().getResourceAsStream("db.properties");

            //  FileInputStream in=new FileInputStream("db.properties");
            System.out.println("in:" + in);

            //Properties 将properties属性文件数据以k-v的形式加载到内存中
            Properties p = new Properties();
            //p.load(in)将int类型加载
            p.load(in);

            //properties里保存到变量中
            username = p.getProperty("db.username");
            password = p.getProperty("db.password");
            url = p.getProperty("db.url");
            driver = p.getProperty("db.driver");
            initSize = p.getProperty("db.initSize");
            maxSize = p.getProperty("db.maxSize");

            System.out.println(username);
            System.out.println(password);
            System.out.println(url);
            System.out.println(driver);

        } catch (IOException e) {
    
    
            e.printStackTrace();
        }

    }


BasicDataSourceメソッドを使用して、接続プールを取得するためのメソッドをカプセル化します

basicDataSource = new BasicDataSource();

データベースのパラメータを接続プールオブジェクトに設定し、basicDataSourceに戻ります

    basicDataSource.setDriverClassName(driver);
    basicDataSource.setUsername(username);
    basicDataSource.setPassword(password);
    basicDataSource.setUrl(url);
    basicDataSource.setInitialSize(Integer.parseInt(initSize));
    basicDataSource.setMaxActive(Integer.parseInt(maxSize));
    return  basicDataSource;

接続プールを介して接続オブジェクトを取得します

	//通过连接池获取连接对象
    public static Connection getConn(){
    
    
        Connection connection = null;
        try {
    
    
            connection = DBUtil.getBData().getConnection();
        } catch (SQLException e) {
    
    
            e.printStackTrace();
        }
        return  connection;
    }

DBUtilの完全なコードは、utilディレクトリにあります。

package util;

/*

连接数据的类

 */


import org.apache.commons.dbcp.BasicDataSource;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

public class DBUtil {
    
    
    private static String username;
    private static String password;
    private static String url;
    private static String driver;
    private static String initSize;
    private static String maxSize;
    private static BasicDataSource basicDataSource;


    static {
    
    

        try {
    
    
            InputStream in = DBUtil.class.getClassLoader().getResourceAsStream("db.properties");

            //  FileInputStream in=new FileInputStream("db.properties");
            System.out.println("in:" + in);
            Properties p = new Properties();
            p.load(in);

            username = p.getProperty("db.username");
            password = p.getProperty("db.password");
            url = p.getProperty("db.url");
            driver = p.getProperty("db.driver");
            initSize = p.getProperty("db.initSize");
            maxSize = p.getProperty("db.maxSize");

            System.out.println(username);
            System.out.println(password);
            System.out.println(url);
            System.out.println(driver);

        } catch (IOException e) {
    
    
            e.printStackTrace();
        }

    }

    //封装一个获取连接池的连接方法
    public static BasicDataSource getBData() {
    
    
    basicDataSource = new BasicDataSource();
    //将数据库的参数设置到连接池对象中
    basicDataSource.setDriverClassName(driver);
    basicDataSource.setUsername(username);
    basicDataSource.setPassword(password);
    basicDataSource.setUrl(url);
    //将字符串转为Integeter类型
    basicDataSource.setInitialSize(Integer.parseInt(initSize));
    basicDataSource.setMaxActive(Integer.parseInt(maxSize));

    return basicDataSource;

    }

    //通过连接池获取连接对象
    public static Connection getConn(){
    
    
        Connection connection = null;
        try {
    
    
            connection = DBUtil.getBData().getConnection();
        } catch (SQLException throwables) {
    
    
            throwables.printStackTrace();
        }
        return connection;
    }
}

2.2.3テスト

TestパッケージのJavaパッケージの下に新しいテストクラスを作成します:DBTest

import org.junit.Test;
import util.DBUtil;

import java.sql.Connection;

public class DBTest {
    
    

    //单元测试 junit 单元测试包
    /*单元测试方法
    注意:1 方法返回值只能写void
    2 方法不能传参数
    3 方法上面使用@Test注解*/
    @Test
    public void test1(){
    
    

        Connection conn = DBUtil.getConn();
        System.out.println("conn:"+conn);
    }
}

試験結果:
ここに画像の説明を挿入

印刷されたconnデータベース接続プール接続が成功しました

おすすめ

転載: blog.csdn.net/qq_43881663/article/details/112875921