JDBC常见的几种连接池使用

一.连接池是什么?

连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的 线程 使用。 这种连接“汇集”起来的技术基于这样的一个事实:对于大多数应用程序,当它们正在处理通常需要数毫秒完成的 事务 时,仅需要能够访问 JDBC 连接的 1 个线程。 当不处理事务时,这个连接就会闲置。 相反,连接池允许闲置的连接被其它需要的线程使用。 事实上,当一个线程需要用 JDBC 对一个 GBase 或其它数据库操作时,它从池中请求一个连接。 当这个线程使用完了这个连接,将它返回到连接池中,这样这就可以被其它想使用它的线程使用。 当连接从池中“借出”,它被请求它的 线程 专有地使用。

二.连接池的优点

2.1 资源重用

由于数据库连接得到重用,避免了频繁创建、释放连接引起的大量性能开销。在减少系统开销的基础之上,也增进了系统运行环境的稳定性。

2.2 更快的系统响应速度

数据库连接池在初始化过程中,往往已经创建了若干数据库连接置于池中备用。此时连接的初始化工作均已完成。对于业务请求处理而言,直接利用现有可用连接,避免了数据库连接初始化和释放过程的时间开销,从而缩减了系统整体响应时间。

2.3 分配新资源的手段

对于多应用共享同一数据库而言,可在应用层通过数据库连接的配置。

2.4 统一连接管理,避免数据库连接泄露

在较为完备的数据库连接池实现中,可根据预先的连接占用超时设定,强制收回被占用连接。从而避免了常规数据库连接操作中可能出现的资源泄露。

三.连接池的四种常见配置方式

3.1 C3P0数据库连接池

C3P0 是一个开源组织提供的一个数据库连接池,速度相对较慢,稳定性还可以,hibernate官方推荐使用。

  1. 导入jar包
    主要是C3P0和MySQL的jar包。

在这里插入图片描述

  1. 配置XML文件
    在连接数据库中可以直接使用。
    c3p0-config.xml文件:
<c3p0-config>
    <!--使用默认的配置读取数据库连接池对象 -->
    <default-config>
        <!--  连接参数 -->
        <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/work121DB?useServerPrepStmts=true</property>
        <property name="user">root</property>
        <property name="password">ww121212</property>
        <!-- 连接池参数 -->
        <!--初始化申请的连接数量-->
        <property name="initialPoolSize">5</property>
        <!--最大的连接数量-->
        <property name="maxPoolSize">10</property>
        <!--超时时间-->
        <property name="checkoutTimeout">3000</property>
    </default-config>
<c3p0-config>
  1. 连接数据库开始使用
    C3P0连接池中已经设置了其配置,所以直接使用ComboPooledDataSource来生成实例,
    根据实例调用信息,连接数据库。
public static void main(String[] args) {
		//使用ComboPooledDataSource来生成dataSource的实例
        ComboPooledDataSource dataSource=new ComboPooledDataSource();
            try {
                //连接数据库
                Connection con=dataSource.getConnection();
                //创建SQL语句
                String sql="select * from student";
                //创建命令并执行命令
                PreparedStatement pre=con.prepareStatement(sql);
                ResultSet rs=pre.executeQuery();
                while(rs.next()){
                    int id=rs.getInt(1);
                    String name=rs.getString(2);
                    String birth=rs.getString(3);
                    String sex=rs.getString(4);
                    System.out.println("id:"+id+"\t姓名:"+name+"\t出生日期:"+birth+"\t性别:"+sex);
                }

                //关闭资源
                rs.close();
                pre.close();
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
    }

3.2 Druid(德鲁伊)数据库连接池

Druid 是阿里提供的数据库连接池,据说是集DBCP 、C3P0 、Proxool优点于一身的数据库连接池,但是速度不确定是否有BoneCP快。

  1. 导入jar包
    在这里插入图片描述
  2. 创建一个配置文件
driverClassName = com.mysql.cj.jdbc.Driver
url = jdbc:mysql://127.0.0.1:3306/work122DB
username = root
password = ww121212
initialSize = 10
maxActive = 30
maxWait = 1000
  1. 加载配置文件使用
 public static void main(String[] args) throws Exception {
        //加载配置文件
        Properties properties=new Properties();
        properties.load(new FileInputStream("src/a/jdbc.properties"));
        //获取数据库连接池对象
        DataSource dataSource= DruidDataSourceFactory.createDataSource(properties);
        //获取连接
        Connection con=dataSource.getConnection();
        System.out.println(con);
    }

3.3 DBCP数据库连接池

DBCP 是Apache提供的数据库连接池。tomcat服务器自带dbcp数据库连接池。速度相对c3p0较快,但因自身存在BUG,Hibernate3已不再提供支持。

  1. 先引入DBCP的jar包:

在这里插入图片描述
2. 设置配置文件

#连接设置
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/db1?serverTimezone=GMT%2B8
#url=jdbc:mysql://localhost:3306/db1??useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
username=root
password=12345
#初始化连接
initialSize=5
#最大空闲连接
maxIdle=10
#最大等待时间
maxWait=3000

获取连接使用:

//加载配置文件
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/2023StudentDB");
dataSource.setUsername("root");
dataSource.setPassword("ww121212");
Connection conn = dataSource.getConnection();

3.4 HikariCP数据库连接池

HikariCP是由日本程序员开源的一个数据库连接池组件,代码非常轻量,并且速度非常的快。根据官方提供的数据,在i7,开启32个线程32个连接的情况下,进行随机数据库读写操作,HikariCP的速度是现在常用的C3P0数据库连接池的数百倍。在SpringBoot2.0中,官方也是推荐使用HikariCP

  1. 导入jar包
    在这里插入图片描述
    2.创建一个配置文件
#连接设置
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/db1?serverTimezone=GMT%2B8
#url=jdbc:mysql://localhost:3306/db1??useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
username=root
password=12345
#初始化连接
initialSize=5
#最大空闲连接
maxIdle=10
#最大等待时间
maxWait=3000
  1. 获取连接使用
    //获取配置文件
    Properties properties = new Properties();
    properties.load(new FileInputStream("src\\database.properties"));
    //将获取到的配置文件进行初始化配置
    HikariConfig config = new HikariConfig(properties);
    //创建HikariDataSource数据源
    HikariDataSource dataSource = new HikariDataSource(config);
    //从数据源获取连接
    Connection conn = dataSource.getConnection();
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值