MySQL---数据库从入门走向大神系列(十三)-BasicDataSource创建DataSource(DBCP连接池配置)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL---数据库从入门走向大神系列(十三)-BasicDataSource创建DataSource(DBCP连接池配置)

DBCP(DataBase connection pool),数据库连接池。是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。单独使用dbcp需要2个包:commons-dbcp.jar,commons-pool.jar由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。

首先,下载必须的jar包

dbcp包,目前版本是2.1.1 :

http://commons.apache.org/proper/commons-dbcp/download_dbcp.cgi

pool包,目前版本是2.4.2:

http://commons.apache.org/proper/commons-pool/download_pool.cgi

Apache Commons Logging 包 目前版本为1.2:

http://commons.apache.org/proper/commons-logging/download_logging.cgi

MySQL的jar包mysql-connector-java-5.1.39-bin目前是5.1.39版本:

http://dev.mysql.com/downloads/connector/j/

演示代码:

package cn.hncu.dbcp;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.commons.dbcp2.BasicDataSourceFactory;
import org.junit.Test;
public class DbcpPoolDemo {
    // 纯Java方式设置参数,使用dbcp池
    @Test
    public void testDbcp() {
        BasicDataSource pool = new BasicDataSource();// 连接池
        pool.setUsername("root");
        pool.setPassword("1234");
        pool.setDriverClassName("com.mysql.jdbc.Driver");
        pool.setUrl("jdbc:mysql://127.0.0.1:3306/hncu?useUnicode=true&characterEncoding=utf-8");
        System.out.println(pool.getMaxIdle());// 最大空闲时间。如果一个用户获取一个连接,不用,多长时间会被强行收回
        System.out.println(pool.getMaxWaitMillis());// 在抛出异常之前,池等待连接被回收的最长时间(当没有可用连接时)。设置为-1表示无限等待。
        System.out.println(pool.getInitialSize());// 初始化时有几个Connection
        System.out.println(pool.getMaxTotal());// 最多能有多少个Connection
        System.out.println("----------------");
        // pool.setMaxTotal(20);//可以我们自己设置池的相关参数,如最大连接数
        // 从它的池中获取连接
        for (int i = 0; i < 20; i++) {
            Connection con = null;
            try {
                con = pool.getConnection();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            System.out.println(i + ":" + con.hashCode());
        }
    }
    // 通过配置文件方式设置参数,使用dbcp池
    @Test
    public void testPropertyFile() throws Exception {
        Properties p = new Properties();
        p.load(DbcpPoolDemo.class.getResourceAsStream("dbcp.properties"));// 配置文件和当前类的class放在一起
        // p.load(DbcpPoolDemo.class.getClassLoader().getResourceAsStream("dbcp.properties"));//配置文件要放在src(bin)的根目录---classpath的根
        DataSource pool = BasicDataSourceFactory.createDataSource(p);
        // 从它的池中获取连接
        for (int i = 0; i < 20; i++) {
            Connection con = pool.getConnection();
            System.out.println(con.hashCode());
            if (i % 2 == 0) {
                con.close();
            }
        }
    }
}

一开始,默认的可以new的Connection对象为8个!

而且就算你是刚把原来的connection对象.close()也不会拿到重复Connection对象,以前的版本是会拿到原来还回去的Connectin对象的。

Connection池-本地线程管理对象

package cn.hncu.dbcp;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp2.BasicDataSourceFactory;
public class DbcpUtil {
    private static DataSource pool;
    private static ThreadLocal<Connection> t = new ThreadLocal<Connection>();
    static{
        try {
            //读取配置文件
            Properties p = new Properties();
            p.load(DbcpUtil.class.getResourceAsStream("dbcp.properties"));// 配置文件和当前类的class放在一起
            pool = BasicDataSourceFactory.createDataSource(p);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //返回DataSource--池
    public static DataSource getDataSource(){
        return pool;
    }
    public static Connection getConnection() throws SQLException{
        //从本地线程管理对象t中拿
        Connection con = t.get();
        if(con==null){
            con=pool.getConnection();
            //放入t中
            t.set(con);
        }
        return con;
    }
}

相对于自己写Connection池,用第三方的扩展包显然方便多。

转载请附上原文博客链接:  

http://blog.csdn.net/qq_26525215

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
11天前
|
消息中间件 资源调度 关系型数据库
如何在Flink on YARN环境中配置Debezium CDC 3.0,以实现实时捕获数据库变更事件并将其传输到Flink进行处理
本文介绍了如何在Flink on YARN环境中配置Debezium CDC 3.0,以实现实时捕获数据库变更事件并将其传输到Flink进行处理。主要内容包括安装Debezium、配置Kafka Connect、创建Flink任务以及启动任务的具体步骤,为构建实时数据管道提供了详细指导。
33 9
|
15天前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
55 13
|
9天前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
25 4
|
9天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
23 4
|
7天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
22 1
|
11天前
|
安全 Nacos 数据库
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改。本文详细探讨了这一问题的原因及解决方案,包括限制公网访问、使用HTTPS、强化数据库安全、启用访问控制、监控和审计等步骤,帮助开发者确保服务的安全运行。
25 3
|
4天前
|
运维 关系型数据库 MySQL
安装MySQL8数据库
本文介绍了MySQL的不同版本及其特点,并详细描述了如何通过Yum源安装MySQL 8.4社区版,包括配置Yum源、安装MySQL、启动服务、设置开机自启动、修改root用户密码以及设置远程登录等步骤。最后还提供了测试连接的方法。适用于初学者和运维人员。
33 0
|
1月前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
61 3
Mysql(4)—数据库索引
|
16天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
82 1
|
18天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
61 2