IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 【JDBC】数据库连接池技术 -> 正文阅读

[Java知识库]【JDBC】数据库连接池技术

一、数据库连接池技术

1.数据库连接池的基本思想
就是为数据库连接建立一个"缓冲池"。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从"缓冲池"中取出一个,使用完毕之后再放回去。
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个。
在这里插入图片描述
2.数据库连接池的优点
资源重用、更快的系统反应速度、新的资源分配手段、统一的连接管理,避免数据库连接泄露
3.数据库连接池的设置:
数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。

二、多种开源的数据库连接池

JDBC的数据库连接池使用javax.sql.DataSource 来表示,DataSource只是一个接口,该接口通常由服务器(Weblogic, WebSphere,Tomcat)提供实现,也有一些开源组织提供实现︰
(1)dbcp:是Apache提供的数据库连接池。tomcat服务器自带dbcp数据库连接池。速度相对C3P0较快,但因自身存在BUG,Hibernate3已不再提供支持。
(2)c3p0:是一个开源组织提供的一个数据库连接池,速度相对较慢,稳定性较好(hibernate官方推荐使用)
(3)Proxool:是sourceforge下的一个开源项目数据库连接池,有监控连接池状态的功能,稳定性较c3p0差一点
(4)BoneCP:是一个开源组织提供的数据库连接池,速度快
(5)Druid:是阿里提供的数据库连接池,据说是集DBCP、C3P0、Proxool 优点于一身的数据库连接池,但是速度不确定是否有BoneCP快

DataSource通常被称为数据源,它包含连接池连接池管理两个部分,习惯上也经常把DataSource称为连接池,DataSource用来取代DriverManager来获取Connection,获取速度快,同时可以大幅度提高数据库访问速度。

1.c3p0数据库连接池
在这里插入图片描述

/**
 * c3p0数据库连接池的使用
 * @author wds
 * @date 2021-12-14 16:38
 */
public class C3P0Test {
    //方式1
    @Test
    public void getConnectionTest() throws Exception {
        //获取C3P0数据库连接池
        ComboPooledDataSource cpds = new ComboPooledDataSource();
        cpds.setDriverClass("com.mysql.cj.jdbc.Driver" ); //loads the jdbc driver
        cpds.setJdbcUrl( "jdbc:mysql://localhost:3306/test" );
        cpds.setUser("root");
        cpds.setPassword("12345678");
        //设置初始时数据库连接池中的连接数
        cpds.setInitialPoolSize(10);
        Connection connect = cpds.getConnection();
        System.out.println(connect);
        //销毁C3p0连接池
        DataSources.destroy(cpds);
    }

    //方式2:使用配置文件实现数据库连接池c3p0技术(使用较多)
    @Test
    public void getConnectionTest01() throws SQLException {
        ComboPooledDataSource cpds = new ComboPooledDataSource("helloc3p0");
        Connection connect = cpds.getConnection();
        System.out.println(connect);
    }
}

配置文件:c3p0-config.xml

<?xml version="1.0" encoding="utf-8" ?>
<c3p0-config>
    <!-- This app is massive! -->
    <named-config name="helloc3p0">
        <!-- 获取数据库连接池的四个基本信息 -->
        <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property>
        <property name="user">root</property>
        <property name="password">12345678</property>
        <!-- 数据库连接池的基本管理信息 -->
        <!-- 当数据库连接池中的连接数不够时,c3p0一次向数据库连接池中申请的连接数 -->
        <property name="acquireIncrement">5</property>
        <!-- c3p0数据库连接池中的初始化连接数 -->
        <property name="initialPoolSize">10</property>
        <!--c3p0数据库连接池中最小的连接数-->
        <property name="minPoolSize">10</property>
        <!--c3p0数据库连接池中最大的连接数-->
        <property name="maxPoolSize">100</property>
        <!--c3p0数据库连接池中最多维护的Statement的个数-->
        <property name="maxStatement">50</property>
        <!--c3p0数据库连接池中最多使用的Statement的个数-->
        <property name="maxStatementPerConnection">2</property>
    </named-config>
</c3p0-config>

连接成功:
在这里插入图片描述
2.dbcp数据库连接池
在这里插入图片描述

/**
 * dbcp数据库连接池的使用
 * @author wds
 * @date 2021-12-14 17:49
 */
public class DbcpTest {
    //方式1:
    @Test
    public void getConnectionTest() throws SQLException {
        //创建dbcp的数据库连接池
        BasicDataSource dataSource = new BasicDataSource();
        //设置基本信息
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/test");
        dataSource.setUsername("root");
        dataSource.setPassword("12345678");
        //设置数据库连接池的其他属性
        dataSource.setInitialSize(10);
        dataSource.setMaxActive(10);
        Connection connect = dataSource.getConnection();
        System.out.println(connect);
    }
    //方式2:使用配置文件
    @Test
    public void getConnectionTest01() throws Exception {
        Properties pros = new Properties();
//        //方式1:使用系统的加载器
//        InputStream inputStream = ClassLoader.getSystemClassLoader().getResourceAsStream("dbcp.properties");
        //方式2:使用
        FileInputStream fileInputStream = new FileInputStream(new File("E:\\java\\JDBC\\day02_jdbc\\src\\dbcp.properties"));
        pros.load(fileInputStream);
        DataSource dataSource = BasicDataSourceFactory.createDataSource(pros);
        Connection connect = dataSource.getConnection();
        System.out.println(connect);
    }
}

配置文件: dbcp.properties

driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=12345678

连接成功:
在这里插入图片描述

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-12-15 18:08:21  更:2021-12-15 18:09:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:55:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码