目录
一、 什么是数据库连接池?
四种的数据库连接池
四种数据库的属性对比
C3P0的定义
一、定义
主要特点包括:
二,C3P0实操
1,导入jar包
2,配置xml文件
3,c3p0-config.xml模板
三、Druid的定义
Druid实操
1,导入jar包
2,配置properties文件
四、HikariCP
1,HikariCP的定义
2,配置文件
四、DBCP的定义
1,配置文件
连接池汇总
在了解 C3P0 数据库连接池之前,让我们先明确什么是数据库连接池。数据库连接池是一个维护数据库连接的池子,它预先创建一定数量的数据库连接,并将这些连接保存在池中,以便应用程序在需要时可以从池中获取连接,而不是每次都创建新的连接。
数据库连接是一种昂贵的资源,创建和销毁连接的开销很大。通过使用连接池,可以避免频繁地创建和销毁连接,提高了数据库访问的性能和效率。连接池还可以控制连接的数量,防止连接数过多导致数据库性能下降,同时还可以管理连接的状态、超时和异常处理。
1、DBCP
由Apache开发的一个Java数据库连接池项目, Jakarta commons-pool对象池机制,Tomcat使用的连接池组件就是DBCP。单独使用dbcp需要3个包:common-dbcp.jar,common-pool.jar,common-collections.jar,预先将数据库连接放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完再放回。单线程,并发量低,性能不好,适用于小型系统。
2、C3P0
开源的JDBC连接池,实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate、Spring等。单线程,性能较差,适用于小型系统,代码600KB左右。
3、Druid
Druid:Druid是Java语言中最好的数据库连接池,Druid能够提供强大的监控和扩展功能,是一个可用于大数据实时查询和分析的高容错、高性能的开源分布式系统,尤其是当发生代码部署、机器故障以及其他产品系统遇到宕机等情况时,Druid仍能够保持100%正常运行。主要特色:为分析监控设计;快速的交互式查询;高可用;可扩展;Druid是一个开源项目,源码托管在github上
4,DBCP
DBCP是Apache提供的数据库连接池。tomcat服务器自带dbcp数据库连接池。速度相对c3p0较快,但因自身存在BUG,Hibernate3已不再提供支持
DBCP | DBCP是Apache提供的数据库连接池。tomcat服务器自带dbcp数据库连接池。速度相对c3p0较快,但因自身存在BUG,Hibernate3已不再提供支持。 是Apache软件基金会的一个项目,提供了一个稳定和可靠的连接池。它是许多Java应用程序的首选选择 |
C3P0 | C3P0 是一个开源组织提供的一个数据库连接池,速度相对较慢,稳定性还可以,hibernate官方推荐使用 |
Druid | Druid 是阿里提供的数据库连接池,据说是集DBCP 、C3P0,Proxool优点于一身的数据库连接池,但是速度不确定是否有BoneCP快 Druid是一个开源的数据库连接池,具有监控和统计功能,可以帮助开发人员分析数据库连接的使用情况和性能 |
HikariCP | HikariCP是一个轻量级、高性能的数据库连接池,被广泛认为是目前性能最好的连接池之一。它专注于快速的连接获取和释放,适用于高并发的应用程序 |
举例说明:
C3P0是一个开源的JDBC连接池,它实现了数据源与JNDI绑定,支持JDBC3规范和实现了JDBC2的标准扩展说明的Connection和Statement池的DataSources对象
即将用于连接数据库的连接整合在一起形成一个随取随用的数据库连接池(Connection pool)
C3P0jar包的链接如下:
https://pan.baidu.com/s/1i2I_KacKLyMyZPvJLseMoQ?pwd=0102
com.mchange
c3p0
0.9.5.2
通过配置文件进行获取,值得注意的是,如果配置文件的后缀是xml的话,那么这个配置文件的名字只能是c3p0-config.xml
下面是配置的xml文件,可以根据实际进行修改
com.mysql.cj.jdbc.Driver
jdbc:mysql://localhost:3306/stuwork1128db
root
root
5
10
3000
4,创建C3P0类
参数介绍
@Test
public void c3p0Show() throws PropertyVetoException, SQLException {
//C3P0的数据源
ComboPooledDataSource dataSource=new ComboPooledDataSource();
//连接数据库参数
dataSource.setDriverClass("com.mysql.cj.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/stuwork1128db");
dataSource.setUser("root");
dataSource.setPassword("root");
//连接池参数设置
dataSource.setInitialPoolSize(5);//初始连接数
dataSource.setMaxPoolSize(20);//最大连接数
dataSource.setCheckoutTimeout(3000);//连接超时
//连接池中获取一个连接
Connection conn=dataSource.getConnection();
ResultSet resultSet=conn.prepareStatement("select * from stuTable").executeQuery();
while (resultSet.next()){
String names=resultSet.getString("name");
System.out.println(names);
}
conn.close();//释放连接
}
简洁代码
@Test
public void select2() throws SQLException {
//C3P0的数据源
ComboPooledDataSource dataSource=new ComboPooledDataSource("yiyuanshool");
Connection connection=dataSource.getConnection();
Statement statement=connection.createStatement();
System.out.println(statement+"======"+dataSource);
connection.close();
}
运行结果如下:
Druid:Druid是Java语言中最好的数据库连接池,Druid能够提供强大的监控和扩展功能,是一个可用于大数据实时查询和分析的高容错、高性能的开源分布式系统,尤其是当发生代码部署、机器故障以及其他产品系统遇到宕机等情况时,Druid仍能够保持100%正常运行。主要特色:为分析监控设计;快速的交互式查询;高可用;可扩展;Druid是一个开源项目,源码托管在github上
https://pan.baidu.com/s/1n992-5zlNGN8ZvglS6yFZA?pwd=0102
定义一个配置文件druid.properties,并在这个配置文件中设置数据库连接的基本信息,url,driverClassName,username,password,同时可以设置数据库连接池的相关信息。
配置文件druid.properties:
参数介绍
driverClassName = com.mysql.cj.jdbc.Driver
url = jdbc:mysql://localhost:3306/Yiyuanshool
username = root
password = root
initialSize = 10
maxActive = 30
maxWait = 1000
//数据库连接池的核心参数
//使用数据库连接池,需要为其配置一些参数,以控制其工作。
//通常,数据库连接池都会包含以下核心参数:
// 最小连接数:是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量//的数据库连接资源被浪费.
// 最大连接数:是连接池能申请的最大连接数,如果数据库连接请求超过次数,后面的数据库连接请求将被加//入到等待队列中,这会影响以后的数据库操作
// 最大空闲时间
// 获取连接超时时间
// 超时重试连接次数
Druid代码示例
@Test
public void show2() throws Exception {
//加载配置文件map集合中
HashMap map=new HashMap<>();
map.put("driverClassName","com.mysql.cj.jdbc.Driver");
map.put("url","jdbc:mysql://localhost:3306/Yiyuanshool");
map.put("username","root");
map.put("password","root");
map.put("initialSize","10");
map.put("maxActive","30");
map.put("maxWait","1000");
//在工厂创建一个数据源,数据源的连接信息来源properties配置文件
DataSource dataSource = DruidDataSourceFactory.createDataSource(map);
Connection connection = dataSource.getConnection();
System.out.println(connection+"====="+map);
}
运行结果:
HiKariCP 号称是跑的最快的连接池,并且是 SpringBoot 框架的默认连接池
HiKariCP 为了提升性能,做了很多细节上的优化,例如:
使用 FastList 替代 ArrayList,通过初始化的默认值,减少了越界检查的操作
优化并精简了字节码,通过使用 Javassist,减少了动态代理的性能损耗,比如使用 invokestatic 指令代替 invokevirtual 指令
实现了无锁的 ConcurrentBag,减少了并发场景下的锁竞争
参数介绍
#加载数据库驱动
driverClassName=com.mysql.cj.jdbc.Driver
#数据库连接地址
jdbcUrl=jdbc:mysql://localhost:3306/AABBCA
#数据库用户名
username=root
#数据库密码
password=root
# 连接池名称
poolName=AABBCA
# 连接池大小
maximumPoolSize=10
# 最小空闲连接数
minimumIdle=5
# 连接超时时间(毫秒)
connectionTimeout=30000
测试代码:
public class TEXT{
public void static main(String [] args) throws IOException, SQLException {
Properties properties=new Properties();
properties.load(new FileInputStream("src//AAHikariCP.properties"));
//配置连接池
HikariConfig hikariConfig=new HikariConfig(properties);
HikariDataSource hikariDataSource = new HikariDataSource(hikariConfig);
Connection connection = hikariDataSource.getConnection();
ResultSet resultSet = connection.prepareStatement("select count(* )from movie").executeQuery();
if(resultSet.next()){
int count=resultSet.getInt(1);
System.out.println(count);
}
resultSet.close();
connection.close();
}
}
}
导入DBCP的jar包的时候,需要注意的是:不可以只是导入dbcp的jar包commons-dbcp2-2.8.0.jar,还需要导入commons-logging-1.2.jar包和commons-pool2-2.9.0.jar,否则就会发生报错
jar包如下:
https://pan.baidu.com/s/1n992-5zlNGN8ZvglS6yFZA?pwd=0102
1、首先定义一个配置文件,这里定义的是dbcp.properties,在配置文件中设置连接的基本信息,例如url/driverClassName/username/password等,同时还可以设置数据库连接池管理的基本信息等
2、在定义数据库连接池这个类中获取BasicDataSource对象时,需要通过BasicDataSourceFactory的静态方法createDataSource(),并且这个方法的参数时我们刚刚定义的配置文件的路径
3、获取BasicDataSource对象之后,调用getConnection方法,从而返回一个Connection对象
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/horecomdb
user=root
pwd=root
代码示例:
@Test
public void Test2() throws IOException {
//从文件中获取配置信息
Properties properties=new Properties();
String file="db.properties";
InputStream is=Test.class.getClassLoader().getResourceAsStream(file);
properties.load(is);
String driver=(String) properties.get("driver");
String url=(String) properties.get("url");
System.out.println(driver+"========"+url);
//源码编译,不好改,然后可以去配置文件改
}
连接成功如下:
C3P0、DBCP和Druid都是常见的数据库连接池库,它们都提供了高效的管理和复用数据库连接的功能。它们的使用方法类似,通过设置参数来配置连接池的行为,然后通过调用getConnection方法来获取数据库连接。其中,C3P0和DBCP是比较轻量级的连接池库,而Druid是一个功能非常强大的连接池库,提供了许多额外的特性和监控功能。根据实际需求,选择合适的数据库连接池库可以提高数据库访问的性能和效率