Jdbcノート-データベース接続プール

データベース接続プール

概念

基本的なJdbcを使用して操作する場合は、SQLを実行するたびに最初にConnectionオブジェクトを申請し、実行後に解放する必要があります。これにより、パフォーマンスが低下します。したがって、プーリングテクノロジを使用すると、データベースにアクセスするたびに、接続オブジェクトが接続プールから取り出され、アクセスが完了すると、接続オブジェクトが接続プールに返されます。接続オブジェクトを再利用し、パフォーマンスのオーバーヘッドを削減するという目的を達成するため。

メリット

  • パフォーマンスを向上させるために、Connectionオブジェクトの頻繁な作成と破棄を回避します

  • 接続オブジェクトの統合管理に便利

成し遂げる

  1. インターフェイスDataSourceはJdbc標準で定義されています。このインターフェイスは、ドライバーサプライヤによって実装され、3つの実装があります。
    1. 基本的な実現:標準の接続を生成できます
    2. 接続プールの実装:接続プールに自動的に参加する接続を生成できます
    3. 分散トランザクションの実装:分散トランザクションの接続を生成できます
  2. 接続プールを介して実装されたデータソースの場合、取得した接続は、接続を閉じるのではなく、閉じたときに接続プールに返されます。

接続プールの使用方法

  1. DataSourceオブジェクトを作成します
  2. DataSourcegetConnection()メソッドを呼び出して接続を取得します
  3. 操作が完了したら、Connectionのcloseメソッドを呼び出して接続を返します(標準のConnectionの場合、closeメソッドを呼び出すと接続が閉じます。データベース接続プールを介して取得したConnectionの場合、closeメソッドを呼び出しても接続は閉じません。ただし、接続は返されます)

特定の接続プールテクノロジー

c3p0

使用手順

  1. jarパッケージをインポートします

    <!-- c3p0 -->
    <dependency>
        <groupId>com.mchange</groupId>
        <artifactId>c3p0</artifactId>
        <version>0.9.5.5</version>
    </dependency>
    
  2. 構成ファイルを作成します。

    デフォルトでは、c3p0はクラスパスのトップディレクトリでc3p0.propertiesファイルまたはc3p0-config.xmlファイルを検索します。

    <?xml version="1.0" encoding="UTF-8"?>
    <c3p0-config>
    
        <!-- 可以配置多数据源,默认会加载default-config,也可以通过name来指定 -->
        <!-- 默认配置 -->
        <default-config>
            <!-- 连接四大参数配置 -->
            <!-- 对mysql8,若不指定serverTimezone,则c3p0会报错 -->
            <property name="jdbcUrl">jdbc:mysql:///yogurt?userSSL=false&amp;characterEncoding=UTF-8&amp;serverTimezone=UTC&amp;autoReconnect=true</property>
            <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
            <property name="user">root</property>
            <property name="password">root</property>
            <!-- 池参数配置 -->
            <property name="initialPoolSize">5</property>
            <property name="maxPoolSize">10</property>
            <property name="checkoutTimeout">3000</property>
        </default-config>
    
        <!-- 其他库 -->
        <named-config name="other-config">
            <property name="jdbcUrl">jdbc:mysql://localhost:3306/other</property>
            <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
            <property name="user">root</property>
            <property name="password">123</property>
            <property name="acquireIncrement">3</property>
            <property name="initialPoolSize">10</property>
            <property name="minPoolSize">2</property>
            <property name="maxPoolSize">10</property>
        </named-config>
    </c3p0-config>
    
  3. コアオブジェクトCombPooledDataSourceを作成します

  4. 接続を取得getConnection()

    コード例:

    @Test
    	public void testC3p0() throws SQLException {
          
          
    		//会使用默认配置
    		DataSource dataSource = new ComboPooledDataSource();
    		//下面会使用other-config这一项配置
    		//ComboPooledDataSource dataSource = new ComboPooledDataSource("other-config");
    		Connection connection = dataSource.getConnection();
    
    		Statement statement = connection.createStatement();
    		ResultSet set = statement.executeQuery("select * from user limit 3");
    		while (set.next()){
          
          
    			String name = set.getString("name");
    			System.out.println(name);
    		}
    		statement.close();
    		connection.close();
    	}
    
    @Test
    	public void testC3p0_2() throws SQLException {
          
          
    		DataSource dataSource = new ComboPooledDataSource();
    		//配置了最大连接数是10
    		for (int i = 0; i < 12; i++){
          
          
    			Connection connection = dataSource.getConnection();
    			System.out.println(i + ":" + connection);
    			if (i == 6 || i == 5){
          
          
    				//归还连接
    				//这样以来在超过10之后的2次也能获取到连接
    				connection.close();
    			}
    		}
    	}
    

ドルイド

使用手順

  1. jarパッケージをインポートします

    <dependency>
         <groupId>com.alibaba</groupId>
         <artifactId>druid</artifactId>
          <version>1.1.22</version>
     </dependency>
    
  2. 構成ファイル

    druid.properties

    druidはc3p0のように自動的にロードされないため、ファイル名は任意であり、任意のディレクトリに配置できます。druidは構成ファイルを手動でロードする必要があります。

    db.url=jdbc:mysql://localhost:3306/yogurt?userSSL=false&characterEncoding=UTF-8&serverTimezone=UTC
    db.user=root
    db.password=root
    db.driverClass=com.mysql.cj.jdbc.Driver
    
  3. データソースを取得するときは、ファクトリクラスDruidDataSourceFactoryを使用します

  4. 接続を取得

ドルイドをカプセル化し、ユーティリティを形成し、外部に提供する

  • 接続方法を取得する
  • リソースの解放方法
  • 接続プールメソッドを取得する
public class DruidUtil {
    
    
	private static DataSource dataSource;

	static {
    
    
		try {
    
    
			Properties properties = new Properties();
			properties.load(DruidUtil.class.getClassLoader().getResourceAsStream("druid.properties"));
			dataSource = DruidDataSourceFactory.createDataSource(properties);
		}catch (Exception e){
    
    
			e.printStackTrace();
		}
	}

	//获取连接
	public static Connection getConnection() throws SQLException {
    
    
		//从连接池取出一个Connection
		return dataSource.getConnection();
	}

	//释放资源
	public static void close(Statement statement,Connection connection){
    
    
		close(null,statement,connection);
	}

	public static void close(ResultSet resultSet,Statement statement, Connection connection){
    
    

		if (resultSet != null){
    
    
			try {
    
    
				resultSet.close();
			} catch (SQLException e) {
    
    
				e.printStackTrace();
			}
		}

		if (statement != null){
    
    
			try {
    
    
				statement.close();
			} catch (SQLException e) {
    
    
				e.printStackTrace();
			}
		}

		if (connection != null){
    
    
			try {
    
    
				//归还连接
				connection.close();
			} catch (SQLException e) {
    
    
				e.printStackTrace();
			}
		}
	}

	//返回连接池
	public static DataSource getDataSource(){
    
    
		return dataSource;
	}
}

dbcp

少し

おすすめ

転載: blog.csdn.net/vcj1009784814/article/details/106131718