数据库连接池

290 阅读2分钟

传统获取Connection问题分析

  • 传统的JDBC数据库连接试用DriverManager来获取,每次向数据库建立连接的时候都要将Connection加载到内存中,在验证ip地址,用户名和密码。需要数据库连接的时候。就向数据库要求一个,频繁的进行数据库连接操作将占用很多的系统资源,容易造成系统崩溃。
  • 每一次数据库连接,使用完后都得断开,如果程序出现异常未能关闭,将导致数据库内存泄漏,最终将导致重启数据库。
  • 传统获取连接的方式,不能控制创建连接的连接数量,如果连接过多,也能看导致内存泄漏,mysql崩溃。
  • 解决传统开发中数据库连接问题,可以采用数据库连接池技术(connection pool)。

数据库连接池

数据库连接池基本介绍
  • 预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需要从“缓冲池”中取出,使用完毕之后再放回去。
  • 数据库连接池负责分配,管理和释放数据库连接,他允许应用程序重复试用一个现有的数据库连接,而不是新建立一个。
  • 当应用程序向连接池请求的连接数量超过最大的连接数时,这些请求将被加入到等待队列中。
  • JDBC数据库连接池试用java.sql.DataSource来表示,DataSource只是一个接口,该接口通常由第三方提供实现(提供.jar)
C3P0应用
  • 导入jar包
package com.csy.datasource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import java.beans.PropertyVetoException;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

public class C3P0Test {
    //方式1:相关参数,在程序中指定user,url,password

   public void testC3P0() throws IOException, PropertyVetoException, SQLException {
       //1创建一个数据源对象
       ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();

       //2通过配置文件mysql.properties 获取相关信息

       Properties properties = new Properties();
       properties.load(new FileInputStream("D:\ideaworkspaces\JDBCStudy\src\mysql.properties"));
       String user = properties.getProperty("user");
       String password = properties.getProperty("password");
       String driver = properties.getProperty("driver");
       String url = properties.getProperty("url");

      //给数据源comboPoolDataSource设置相关参数
       //注意: 连接的管理是由comboPoolDataSource管理
       comboPooledDataSource.setDriverClass(driver);
       comboPooledDataSource.setUser(user);
       comboPooledDataSource.setPassword(password);
       comboPooledDataSource.setJdbcUrl(url);

       //设置初始化连接数 这里表示初始有10个
       comboPooledDataSource.setInitialPoolSize(10);
       //设置最大连接数 这里表示如果初始的连接数不够最大能增加到50个
       comboPooledDataSource.setMaxPoolSize(50);
       Connection connection = comboPooledDataSource.getConnection();//这个方法就是从DataSource接口实现的

       System.out.println("连接成功");
       connection.close();


   }


}