JDBC中C3P0、Druid、HikariCP 、DBCP连接池的jar包下载与IDEA配置

这篇具有很好参考价值的文章主要介绍了JDBC中C3P0、Druid、HikariCP 、DBCP连接池的jar包下载与IDEA配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、什么是连接池

连接池是应用程序与数据库之间的一个缓冲区,它存储了一定数量的空闲数据库连接,当应用程序需要连接数据库时,可以从连接池中获取一个可用连接,使用完毕后再将连接归还给连接池,从而避免了每次连接都需要创建和销毁连接的开销,提高了应用程序的性能和可伸缩性。连接池也可以控制数据库连接的数量和复用,从而减少了数据库的负担。

简单理解的话就是将连接多个连接一次性从远处拿到自己家抽屉里,需要用的时候就去拿,不用了就放回抽屉,减少了连接的时间,不用去远处去拿。

二、连接池的好处

连接池的好处可以总结为以下几点:

1. 提高性能

数据库连接是资源密集型操作,每次建立连接都需要进行TCP握手,验证用户身份等操作。连接池缓存了一定数量的已经建立的连接,可以更快速地获取和释放连接,减少了连接建立和关闭的时间,提高了应用程序的性能。

2. 稳定性

当并发量较高时,如果每个请求都建立一个新的数据库连接,可能会导致数据库服务器过载。使用连接池可以控制连接的数量,避免过多的连接导致数据库服务器崩溃。

3. 节省资源

使用连接池可以重复利用已有的数据库连接,避免了频繁创建和关闭连接的开销,从而节省了资源。

4. 提高可靠性

连接池可以监控数据库连接的状态,并在连接出现问题时自动重置连接。这对于保持应用程序的可靠性和稳定性非常重要。

有四种连接池c3p0、driuid、HikariCP、DBCP

三、导入jar包

因为所有导入jar包步骤都是一致的,所以单拎出来写

因为需要测试连接池连接数据库是否成功,我们这里使用的是MySql

MySql.jar包:https://dev.mysql.com/downloads/connector/j/

下载MySqljar包

c3p0jar包,java,jar,intellij-idea,开发语言
c3p0jar包,java,jar,intellij-idea,开发语言

导入jar包

将下载好的jar包复制到项目中,建议大家建一个文件专门用来放置jar包。
c3p0jar包,java,jar,intellij-idea,开发语言
复制进去就是这样,接下来添加为库

添加为库

右击jar包添加为库
c3p0jar包,java,jar,intellij-idea,开发语言

根据需求选择级别之后直接确定
c3p0jar包,java,jar,intellij-idea,开发语言
所有jar包都是这样导入。

四、c3p0连接池

什么是c3p0

c3p0是开源的JDBC连接池,实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate、Spring等。单线程,性能较差,适用于小型系统,代码600KB左右。

下载jar包

C3P0jar包:
https://sourceforge.net/projects/c3p0/
c3p0jar包,java,jar,intellij-idea,开发语言

创建配置文件

创建c3p0-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <!--默认配置-->
    <default-config>
        <!--数据库驱动-->
        <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
        <!--数据库的url-->
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/vehicleUpkeepDB</property>
        <!--用户名写自己的-->
        <property name="user">root</property>
        <!--密码写自己的-->
        <property name="password">sasa</property>
        <!--初始连接数-->
        <property name="initialPoolSize">10</property>
        <!--最大连接数-->
        <property name="maxPoolSize">100</property>
        <!--最小连接数-->
        <property name="minPoolSize">10</property>
    </default-config>
</c3p0-config>

测试连接

		// 创建 ComboPooledDataSource 对象,该对象间接实现了 java 官方提供的 DataSource 接口
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        //获取连接,这里会有个异常可能连接不成功,你可以抛出或者处理
        Connection connection = dataSource.getConnection();
        //执行sql语句,这里会有个异常sql语句可能出错,你可以抛出或者处理
        ResultSet resultSet = connection.prepareStatement("select count(0) from user ").executeQuery();
        //处理结果
        if(resultSet.next()){
            System.out.println(resultSet.getInt(1));
        }
        //释放资源
        resultSet.close();
        connection.close();

结果
会有很多事务的东西,需要手动去关闭
c3p0jar包,java,jar,intellij-idea,开发语言
这样就是连接成功了!

五、driuid连接池

什么是driuid

Druid连接池是一个开源的Java数据库连接池,由阿里巴巴公司开发和维护。它提供了高性能、高可用、可扩展的数据库连接管理功能,适用于各种 Java应用程序。

下载jar包

driuid.jar包:https://repo1.maven.org/maven2/com/alibaba/druid/1.2.0/
c3p0jar包,java,jar,intellij-idea,开发语言
导入项目,所有步骤都是一样的,不会就看上面c3p0

创建配置文件

创建driuid.properties

# 驱动名称(连接Mysql)
driverClassName = com.mysql.cj.jdbc.Driver
# 参数?rewriteBatchedStatements=True表示支持批处理机制
url = jdbc:mysql://localhost:3306/cinemaDB?useServerPrepStmts=true
# 用户名,注意这里是按"userName"来读取的
userName = root
# 用户密码(自己改)
password = sasa
# 初始化连接数量
initialSize = 10
# 最小连接数量
minIdle = 10
# 最大连接数量
maxActive = 50
# 超时时间5000ms (在等待队列中的最长等待时间,若超时,)
maxWait = 5000

测试连接

		//加载配置文件,会报错,可能找不到文件,可以选择抛出或者处理
        Properties properties = new Properties();
        properties.load(Files.newInputStream(Paths.get("src\\driuid.properties")));
        //在工厂中创建一个数据源,数据源的连接信息来源于properties配置文件中
        DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
        //从连接池,获取连接对象
        Connection connection = dataSource.getConnection();
        //对sql语句进行预处理
        PreparedStatement preparedStatement = connection.prepareStatement("select count(0) from user ");
        //执行命令
        ResultSet resultSet = preparedStatement.executeQuery();
        //处理结果
        if(resultSet.next()){
            System.out.println(resultSet.getInt(1));
        }
        //释放资源
        resultSet.close();
        connection.close();

结果
c3p0jar包,java,jar,intellij-idea,开发语言

这样就是连接成功了!

六、HikariCP连接池

什么是HikariCP

HikariCP 是一个高性能的 JDBC 连接池组件,号称性能最好的后起之秀,是一个基于BoneCP做了不少的改进和优化的高性能JDBC连接池。

下载jar包

HikariCP需要下载三个jar包

HiariCP.jar包:https://repo1.maven.org/maven2/com/zaxxer/HikariCP/4.0.3/
slf4j.jar包:https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.25/
log4j12.jar包:https://repo1.maven.org/maven2/org/slf4j/slf4j-log4j12/1.7.25/

三个jar包都是找到**.jar**的后缀
c3p0jar包,java,jar,intellij-idea,开发语言

创建配置文件

创建HikariCP.properties

# 驱动参数
jdbcUrl=jdbc:mysql://localhost:3306/vehicleUpkeepDB?characterEncoding=utf8&serverTimezone=GMT%2B8
#驱动名称(连接MySql)
DriverClassName = com.mysql.cj.jdbc.Driver
#账号
username=root
#密码
password=sasa
上面的都是必须要的,下面都有默认参数一般不用配置

#常用的参数
# 从池中借出的连接是否默认自动提交事务
# 默认 true
autoCommit=true

# 当我从池中借出连接时,愿意等待多长时间。如果超时,将抛出 SQLException
# 默认 30000 ms,最小值 250 ms。支持 JMX 动态修改
connectionTimeout=30000

# 一个连接在池里闲置多久时会被抛弃
# 当 minimumIdle < maximumPoolSize 才生效
# 默认值 600000 ms,最小值为 10000 ms,0表示禁用该功能。支持 JMX 动态修改
idleTimeout=600000

# 多久检查一次连接的活性
# 检查时会先把连接从池中拿出来(空闲的话),然后调用isValid()或执行connectionTestQuery来校验活性,如果通过校验,则放回池里。
# 默认 0 (不启用),最小值为 30000 ms,必须小于 maxLifetime。支持 JMX 动态修改
keepaliveTime=0

# 当一个连接存活了足够久,HikariCP 将会在它空闲时把它抛弃
# 默认 1800000  ms,最小值为 30000 ms,0 表示禁用该功能。支持 JMX 动态修改
maxLifetime=1800000

# 用来检查连接活性的 sql,要求是一个查询语句,常用select 'x'
# 如果驱动支持 JDBC4.0,建议不设置,这时默认会调用  Connection.isValid() 来检查,该方式会更高效一些
# 默认为空
# connectionTestQuery=

# 池中至少要有多少空闲连接。
# 当空闲连接 < minimumIdle,总连接 < maximumPoolSize 时,将新增连接
# 默认等于 maximumPoolSize。支持 JMX 动态修改
minimumIdle=5

# 池中最多容纳多少连接(包括空闲的和在用的)
# 默认为 10。支持 JMX 动态修改
maximumPoolSize=10

# 用于记录连接池各项指标的 MetricRegistry 实现类
# 默认为空,只能通过代码设置
# metricRegistry=

# 用于报告连接池健康状态的 HealthCheckRegistry 实现类
# 默认为空,只能通过代码设置
# healthCheckRegistry=

# 连接池名称。
# 默认自动生成
poolName=zzsCP

#少用的参数
# 如果启动连接池时不能成功初始化连接,是否快速失败 TODO
# >0 时,会尝试获取连接。如果获取时间超过指定时长,不会开启连接池,并抛出异常
# =0 时,会尝试获取并验证连接。如果获取成功但验证失败则不开启池,但是如果获取失败还是会开启池
# <0 时,不管是否获取或校验成功都会开启池。
# 默认为 1
initializationFailTimeout=1

# 是否在事务中隔离 HikariCP 自己的查询。
# autoCommit 为 false 时才生效
# 默认 false
isolateInternalQueries=false

# 是否允许通过 JMX 挂起和恢复连接池
# 默认为 false
allowPoolSuspension=false

# 当连接从池中取出时是否设置为只读
# 默认值 false
readOnly=false

# 是否开启 JMX
# 默认 false
registerMbeans=true

# 数据库 catalog
# 默认由驱动决定
# catalog=

# 在每个连接创建后、放入池前,需要执行的初始化语句
# 如果执行失败,该连接会被丢弃
# 默认为空
# connectionInitSql=

# JDBC 驱动使用的 Driver 实现类
# 一般根据 jdbcUrl 判断就行,报错说找不到驱动时才需要加
# 默认为空
# driverClassName=

# 连接的默认事务隔离级别
# 默认值为空,由驱动决定
# transactionIsolation=

# 校验连接活性允许的超时时间
# 默认 5000 ms,最小值为 250 ms,要求小于 connectionTimeout。支持 JMX 动态修改
validationTimeout=5000

# 连接对象可以被借出多久
# 默认 0(不开启),最小允许值为 2000 ms。支持 JMX 动态修改
leakDetectionThreshold=0

# 直接指定 DataSource 实例,而不是通过 dataSourceClassName 来反射构造
# 默认为空,只能通过代码设置
# dataSource=

# 数据库 schema
# 默认由驱动决定
# schema=

# 指定连接池获取线程的 ThreadFactory 实例
# 默认为空,只能通过代码设置
# threadFactory=

# 指定连接池开启定时任务的 ScheduledExecutorService 实例(建议设置setRemoveOnCancelPolicy(true))
# 默认为空,只能通过代码设置
# scheduledExecutor=

# JNDI 配置的数据源名
# 默认为空
# dataSourceJndiName=null

测试连接

		//加载配置文件
        HikariConfig hikariConfig = new HikariConfig("src\\HikariCP.properties");
        //在工厂中创建一个数据源,数据源的连接信息来源于hikariConfig配置文件中
        HikariDataSource ds = new HikariDataSource(hikariConfig);
        //获取连接
        Connection conn = ds.getConnection();
        //执行sql语句
        ResultSet rs = conn.prepareStatement("select count(*) from user").executeQuery();
        //处理结果
        while (rs.next()) {
            System.out.println(rs.getInt(1));
        }
        //释放资源
        conn.close();
        rs.close();

结果
c3p0jar包,java,jar,intellij-idea,开发语言
这样就是连接成功了!

七、DBCP连接池

什么是DBCP

DBCP是Apache Commons项目的一部分,它是一个开源的连接池实现,用于管理和重用数据库连接。DBCP提供了一组API来从连接池中获取和释放连接,以及对连接进行一些基本的操作,如设置超时时间、最大连接数、最大空闲连接数等。使用DBCP可以提高数据库连接的性能和效率,并减少每次操作都需要创建和关闭连接的开销。

DBCP需要下载两个jar包

DBCP.jar包:https://commons.apache.org/proper/commons-dbcp/download_dbcp.cgi

pool.jar包:https://commons.apache.org/proper/commons-pool/download_pool.cgi

下载jar包

两个都是这个位置
c3p0jar包,java,jar,intellij-idea,开发语言

配置文件

创建DBCP.properties

#数据库连接地址
#url=jdbc:mysql://localhost:3306/数据库名(?配置参数)
url=jdbc:mysql://localhost:3306/vehicleUpkeepDB?useUnicode=true&characterEncoding=utf-8
#数据库驱动类的全名
#driverClassName=com.mysql.jdbc.Driver
#数据库帐号
username=root
#数据库密码 等于号后面直接填密码,不需要引号,密码为空时可以不填或 ""
password=sasa
#初始化连接池时,创建的连接数量
initialSize=5
#连接池的最大连接容量,连接使用完后不释放会很容易达到最大值,导致之后的连接被卡住
maxActive=20
#空闲时允许保留的最大连接数量
maxIdle=5
#空闲时允许保留的最小连接数量
minIdle=5
#排队等候的超时时间(毫秒)
maxWait=3000

测试连接

		//文件输入流
        InputStream is = DBCP_Demo.class.getClassLoader().getResourceAsStream("DBCP.properties");
        //将配置文件,转换为Properties对象
        Properties ppt = new Properties();
        ppt.load(is);
        //通过连接池的工厂类(DruidDataSourceFactory)的创建连接池的方法(createDataSource())
        DataSource ds = BasicDataSourceFactory.createDataSource(ppt);
        //从连接池,获取连接对象
        Connection con = ds.getConnection();
        //对sql语句进行预处理
        PreparedStatement ps = con.prepareStatement("select count(*) from user");
        //执行命令
        ResultSet re = ps.executeQuery();
        //处理结果
        if(re.next()){
            int anInt = re.getInt(1);
            System.out.println(anInt);
        }
        //释放资源
        re.close();
        ps.close();
        con.close();

结果:
c3p0jar包,java,jar,intellij-idea,开发语言

可能遇到的问题

NoClassDefFoundError 错误

Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class lesson04.utils.JDBCUtils_DBCP

原因:DBCP2之后的版本需要 logging 包
官网下载:https://commons.apache.org/proper/commons-logging/download_logging.cgi
按照上面的步骤导入 IDEA 中即可

总结

C3P0、Druid、HikariCP和DBCP是四种常见的Java连接池,它们在性能、功能和可配置性方面存在一些区别,如下所示:

  1. C3P0(连接池名称:ComboPooledDataSource):
  • 功能丰富:提供了连接池的基本功能以及连接的超时、最小闲置连接数、最大连接数等配置选项。
  • 可配置性:可以通过配置文件或代码进行灵活的参数配置,但配置较为复杂。
  • 成熟稳定:C3P0是一个成熟且稳定的连接池,被广泛使用。
  1. Druid(连接池名称:DruidDataSource):
  • 高性能:Druid以高性能著称,具备较低的资源消耗和较高的并发能力。
  • 监控功能:提供了丰富的监控接口和统计功能,可以实时监控连接的使用情况、SQL执行性能等。
  • 安全性:Druid可以对连接进行安全检查,防止SQL注入等安全问题。
  • 可配置性:提供了丰富的配置选项,可以根据需求进行灵活配置。
  1. HikariCP(连接池名称:HikariDataSource):
  • 极致性能:HikariCP被认为是目前性能最好的连接池,具有快速启动、低资源消耗和高并发能力。
  • 简单易用:配置简单、代码精简,易于集成和使用。
  • 自适应:HikariCP可以根据应用程序的负载自动调整连接池的大小。
  1. DBCP(连接池名称:BasicDataSource):
  • 常用连接池:DBCP是Apache开发的连接池,是较早期的连接池,被广泛使用。
  • 功能简单:提供了基本的连接池功能,如连接复用、最大连接数限制等。
  • 可靠稳定:DBCP在稳定性和可靠性方面表现良好。

综上所述,这四种连接池在功能、性能和可配置性方面存在一些不同。C3P0和DBCP是较为常用的连接池,Druid和HikariCP则在性能方面有所突出,同时也提供了更多的监控和安全功能。选择合适的连接池应该根据具体需求和场景来决定。文章来源地址https://www.toymoban.com/news/detail-856162.html

到了这里,关于JDBC中C3P0、Druid、HikariCP 、DBCP连接池的jar包下载与IDEA配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C3P0反序列化链分析

    C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。使用它的开源项目有Hibernate、Spring等。之前有接触到过,但是没有深入了解,像之前学二次反序列化时, WrapperConnectionPoolDataSource 就是C3P0的 初学者必学的一条链,先给出完整exp,然后一

    2024年04月15日
    浏览(25)
  • SpringBoot整合(五)HikariCP、Druid数据库连接池—多数据源配置

    在项目中,数据库连接池基本是必不可少的组件。在目前数据库连接池的选型中,主要是 Druid ,为 监控 而生的数据库连接池。 HikariCP ,号称 性能 最好的数据库连接池。 在Spring Boot 2.X 版本,默认采用 HikariCP 连接池。而阿里大规模采用 Druid 。下面介绍在SpringBoot中使用Hika

    2024年02月17日
    浏览(59)
  • Javaweb安全——反序列化漏洞-C3P0链

    C3P0是一个开源的JDBC连接池,它实现了数据源与JNDI绑定,支持JDBC3规范和实现了JDBC2的标准扩展说明的Connection和Statement池的DataSources对象。 即将用于连接数据库的连接整合在一起形成一个随取随用的数据库连接池(Connection pool)。 ysoserial代码注释中的调用链如下: 自下向上的

    2024年02月09日
    浏览(33)
  • apache commons-dbcp Apache Commons DBCP 软件实现数据库连接池 commons-dbcp2

    许多Apache项目支持与关系型数据库进行交互。为每个用户创建一个新连接可能很耗时(通常需要多秒钟的时钟时间),以执行可能需要毫秒级时间的数据库事务。对于一个公开托管在互联网上的应用程序,在同时在线用户数量可能非常大的情况下,为每个用户打开一个连接可

    2024年03月17日
    浏览(42)
  • 换上 HikariCP 连接池,太快了!

    在我们平常的编码中,通常会将一些对象保存起来,这主要考虑的是对象的创建成本。 比如像线程资源、数据库连接资源或者 TCP 连接等,这类对象的初始化通常要花费比较长的时间,如果频繁地申请和销毁,就会耗费大量的系统资源,造成不必要的性能损失。 并且这些对象

    2024年02月10日
    浏览(27)
  • HikariCP连接池设置和监控

    SpringBoot 项目默认自动使用 HikariCP, 最近为了进行数据库session控制, 特意调小了缺省的 poolSize, 原本以为会自动生效, 经过压测发现还是使用默认的 poolSize. 原来的代码 DataSource 对象使用的是 Spring DataSource builder创建的, 需要修改为 HikariDataSource 来创建. 我直接使用 https://blog.csd

    2024年02月08日
    浏览(25)
  • Tomcat DBCP(Database Connection Pool) 数据库连接池入门介绍

    从零开始手写 mybatis (三)jdbc pool 如何从零手写实现数据库连接池 dbcp? 万字长文深入浅出数据库连接池 HikariCP/Commons DBCP/Tomcat/c3p0/druid 对比 Database Connection Pool 数据库连接池概览 c3p0 数据池入门使用教程 alibaba druid 入门介绍 数据库连接池 HikariCP 性能为什么这么快? Apache

    2024年03月16日
    浏览(38)
  • SpringBoot原理分析 | Spring Data整合:JDBC、Druid、Mybatis

    💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Spring Data是一个用于简化数据库访问和操作的开源框架,为开发人员提供了一种通用的方式来处理不同类型的数据存储,例如关系型数据库(如MySQL、PostgreSQL、Oracle)和非关系型数据库(如MongoDB、Cassandra、Redis)等。

    2024年02月12日
    浏览(39)
  • SpringBoot 默认数据库连接池 HikariCP

    目录  引言 1、问题描述 2、SpringBoot默认的数据库连接池 3、HikariCP是什么 4、测试依赖 5、配置文件 5.1、数据库连接参数 5.2、连接池数据基本参数 5.3、连接检查参数 5.4、事务相关参数 5.5、JMX参数 6、HikariCP源码浅析 6.1、HikariConfig--连接池配置的加载 6.2、HikariPool--连接池 1、

    2024年02月10日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包