连接池是一种常用的技术,为什么需要连接池呢?
这个需要从TCP说起。假如我们的服务器跟数据库没有部署在同一台机器,那么,服务器每次查询数据库都要先建立连接,一般都是TCP链接,建立连接就需要3次握手了,假设后台服务跟数据库的单程的访问时间需要10ms,那么光是建立连接就花了30ms,并且TCP还有慢启动的机制,实际上一次查询可能还不止1次TCP来回,查询效率就会大大降低。
为了解决上述问题,我们就需要维护一些长链接,这样就不用每次都去建立连接,毕竟建立连接除了占用时间,还需要一些其他的系统资源。另外的好处,连接池让我们更加容易地管理,一方面是可以避免数据库资源都被某几个API占据,另一方面也可以避免资源泄露。
HikariCP是由日本程序员开源的一个数据库连接池组件,代码非常轻量,并且速度非常的快。根据官方提供的数据,在i7,开启32个线程32个连接的情况下,进行随机数据库读写操作,HikariCP的速度是现在常用的C3P0数据库连接池的数百倍。在SpringBoot2.0中,官方也是推荐使用HikariCP
要先导入下载好的jar包:
driverClassName=com.mysql.cj.jdbc.Driver
# 数据库连接URL
jdbcUrl=jdbc:mysql://localhost:3306/qiche1204
# 数据库用户名
username = root
# 数据库密码
password = SASA
# 连接池名称
poolName=MyConnectionPool
# 连接池大小
maximumPoolSize=10
# 最小空闲连接数
minimumIdle=5
# 连接超时时间(毫秒)
connectionTimeout=30000
# 空闲连接超时时间(毫秒)
idleTimeout=600000
# 最大生存时间(毫秒)
maxLifetime=1800000
package HikariCP;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.junit.Test;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
public class Demo1 {
@Test
public void testHikari() throws IOException, SQLException {
//1.配置连接池
// HikariConfig hikariConfig = new HikariConfig();
// 也可以通过properties配置文件配置连接池new HikariConfig(Properties properties)
Properties properties = new Properties();
FileInputStream fileInputStream = new FileInputStream("src\\HikariCP.properties");
properties.load(fileInputStream);
HikariConfig hikariConfig = new HikariConfig(properties);
/*hikariConfig.setJdbcUrl("jdbc:mysql://localhost:3306");
hikariConfig.setDriverClassName("com.mysql.cj.jdbc.Driver");
hikariConfig.setUsername("root");
hikariConfig.setPassword("SASA");
hikariConfig.setMaximumPoolSize(30); // 最大连接数
hikariConfig.setMinimumIdle(10); // 最小连接数
hikariConfig.setConnectionTimeout(3000); // 连接超时时间从连接池中获取一个连接最大等待多久时间,单位毫秒*/
//2.通过配置类生成HikariCP连接池对象
HikariDataSource dataSource = new HikariDataSource(hikariConfig);
System.out.println(dataSource.getConnection());
}
}
运行结果如下就好:
1、DBCP是Apache提供的数据库连接池,它是一个用于管理数据库连接的工具。它可以帮助我们更有效地使用数据库连接资源,提高数据库访问的性能和效率。
2、DBCP是Tomcat服务器自带的数据库连接池,它相对于C3P0连接池来说速度更快。然而,DBCP自身存在一些BUG,并且Hibernate3已经停止对其提供支持。
3、使用DBCP连接池的好处是可以减少数据库连接的创建和销毁的开销,提高数据库访问的性能。此外,连接池还可以管理连接的数量,避免连接过多导致资源浪费,同时也可以控制连接的超时时间,避免连接长时间占用而不释放。
要先导入下载好的jar包:
driverClassName=com.mysql.cj.jdbc.Driver
# 数据库连接URL
url=jdbc:mysql://localhost:3306/qiche1204
# 数据库用户名
username=root
# 数据库密码
password=SASA
initialSize=10
maxActive=30
maxWait=3000
package DBCP;
import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.commons.dbcp2.BasicDataSourceFactory;
import org.junit.Test;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.SQLException;
import java.util.Properties;
public class Demo1 {
@Test
public void testDBCP() throws SQLException, IOException {
// 创建一个Properties对象
Properties properties = new Properties();
// 创建一个FileInputStream对象,用于读取src\\dbcp.properties文件
FileInputStream fileInputStream
= new FileInputStream("src\\dbcp.properties");
// 使用FileInputStream对象读取文件,并将文件内容加载到properties对象中
properties.load(fileInputStream);
// 使用properties对象创建一个BasicDataSource对象
BasicDataSource dataSource = BasicDataSourceFactory.createDataSource(properties);
// 打印dataSource对象创建的连接
System.out.println(dataSource.getConnection());
}
}
运行结果如下就好: