连接池
前面每次操作数据库都要重新获取连接,使用完毕就
close()
进行释放,频繁的创建和销毁造成资源浪费,同时对服务器压力巨大。
连接池就是数据库连接对象的缓冲区,通过配置,由连接池负责创建连接、管理连接、释放连接等操作。
预先创建数据库连接放入连接池,用户在请求时,通过连接池直接获取连接,使用完毕后将连接放回池中,避免了频繁的创建和销毁,提供性能。
当池中无连接可用时,且未达到上限时,连接池会新建连接。池中连接达到上限时,用户请求会等待,可以设置超时时间。
常见的连接池
JDBC 的数据库连接池使用 javax.sql.DataSource 接口进行规范,所有的第三方连接池都可以实现此接口,自行进行扩展。
目前最主流的连接有:
- Druid(德鲁伊):阿里巴巴提供的数据库连接池,是集 DBCP、C3P0、Proxool 优点于一身的连接池,性能、扩展性、易用性都更好,功能丰富;
- Hikari(shi ga li):是 SpringBoot2.x 之后就内置的数据库连接池,基于 BnoeCP 做了优化处理,效率超高;

Druid
Druid下载地址:Druid历史版本下载
硬编码使用
java
@Test
public void testHardDruid() throws SQLException {
// 1、创建 DruidDataSource 连接池对象
DruidDataSource druidDataSource = new DruidDataSource();
// 2、设置连接池的配置信息
// 2.1 必填配置
druidDataSource.setDriverClassName("com.mysql.jdbc.Driver");
druidDataSource.setUrl("jdbc:mysql:///atguigu");
druidDataSource.setUsername("root");
druidDataSource.setPassword("1234");
// 2.2 非必填配置
druidDataSource.setInitialSize(10); // 默认创建连接池 10 个连接
druidDataSource.setMaxActive(20); // 最大连接个数 20 个
// 3、通过连接池获取连接对象
DruidPooledConnection connection = druidDataSource.getConnection();
// 4、执行增删改查操作
// 5、回收连接(虽然是close,但是不是销毁而是回收)
connection.close();
}
软编码使用
所谓软编码,就是将一些配置信息,写入配置文件,然后再 java 类中再进行读取。
java
@Test
public void testSoftDruid() throws Exception {
// 1、创建 Properties 集合,用于存储外部配置文件的key和value值
Properties properties = new Properties();
// 2、读取配置文件,获取输入流,加载到 Properties 中
InputStream resourceAsStream
= DruidTest.class.getClassLoader().getResourceAsStream("db.properties");
properties.load(resourceAsStream);
// 3、基于 Properties 集合构建 DruidDataSource 连接池
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
// 4、通过连接池获取连接对象
Connection connection = dataSource.getConnection();
// 5、执行增删改查
// 6、资源回收
connection.close();
}
properties
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/atguigu
username=root
password=1234
initialSize=10
maxActive=20
HikariCP
HikariCP下载地址:HikariCP下载地址
slf4j下载地址:slf4j-api下载地址
硬编码使用
java
@Test
public void testHardHikariCP() throws SQLException {
// 1、创建 HikariDataSource 连接池对象
HikariDataSource hikariDataSource = new HikariDataSource();
// 2、设置连接池的配置信息
// 2.1 必填的配置
hikariDataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
hikariDataSource.setJdbcUrl("jdbc:mysql:///atguigu");
hikariDataSource.setUsername("root");
hikariDataSource.setPassword("1234");
// 2.2 可选的配置
hikariDataSource.setMinimumIdle(10);
hikariDataSource.setMaximumPoolSize(20);
// 3、通过连接池获取连接对象
Connection connection = hikariDataSource.getConnection();
System.out.println(connection);
// 4、执行增删改查
// 5、回收连接
connection.close();
}
软编码使用
java
@Test
public void testSoftHikariCP() throws IOException, SQLException {
// 1、创建 Properties 集合,存储外部配置文件的key和value值
Properties properties = new Properties();
// 2、读取外部配置文件,获取输入流,加载到 Properties 集合里
InputStream resourceAsStream
= HikariCPTest.class.getClassLoader().getResourceAsStream("hikari.properties");
properties.load(resourceAsStream);
// 3、创建 HikariConfig 连接池配置对象
HikariConfig hikariConfig = new HikariConfig(properties);
// 4、基于 HikariConfig 连接池配置对象,构建 HikariDataSource
HikariDataSource hikariDataSource = new HikariDataSource(hikariConfig);
// 5、获取连接
Connection connection = hikariDataSource.getConnection();
System.out.println(connection);
// 6、执行增删改查
// 7、回收连接
connection.close();
}
properties
driverClassName=com.mysql.cj.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3306/atguigu
username=root
password=1234
minimumIdle=10
maximumPoolSize=20