什么是数据库连接池?

数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。

数据库连接池基本原理?

连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用。而连接的建立、断开都由连接池自身来管理。同时,还可以通过设置连接池的参数来控制连接池中的初始连接数、连接的上下限数以及每个连接的最大使用次数、最大空闲时间等等。也可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。
数据库连接池的最小连接数和最大连接数的设置要考虑到下列几个因素:

  • 最小连接数

是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费。

  • 最大连接数

是连接池能申请的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求将被加入到等待队列中,这会影响之后的数据库操作。

  • 最小连接数与最大连接数差距

最小连接数与最大连接数相差太大,那么最先的连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接。不过,这些大于最小连接数的数据库连接在使用完不会马上被释放,它将被放到连接池中等待重复使用或是空闲超时后被释放。

HikariCP:

springboot默认连接池是这个:直接导入springboot的JDBC就可以导入相关依赖了!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
spring:
datasource:
url: jdbc:mysql://localhost:3306/mp?useSSL=false&autoReconnect=true&characterEncoding=utf8
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: A86789234
# 指定为HikariDataSource
type: com.zaxxer.hikari.HikariDataSource
# hikari连接池配置
hikari:
#连接池名
pool-name: HikariCP
#最小空闲连接数
minimum-idle: 5
# 空闲连接存活最大时间,默认10分钟
idle-timeout: 600000
# 连接池最大连接数,默认是10
maximum-pool-size: 10
# 此属性控制从池返回的连接的默认自动提交行为,默认值:true
auto-commit: true
# 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认30分钟
max-lifetime: 1800000
# 数据库连接超时时间,默认30
connection-timeout: 30000
# 连接测试query
connection-test-query: SELECT 1

重要参数
1.maximum-pool-size 池中最大连接数(包括空闲和正在使用的连接)
2.minimum-idle 池中最小空闲连接数量。默认值10
3.pool-name 连接池的名字
4.auto-commit 当auto-commit设置为true时(这是默认值),意味着对于每一个通过连接池执行的SQL语句,默认都会自动提交事务。也就是说,每一条单独的SQL查询或数据修改操作都会立即持久化到数据库中。果将auto-commit设置为false,则应用程序需要显式地管理事务,即在一系列数据库操作完成后调用connection.commit()来提交事务
5.idle-timeout 空闲时间。仅在minimum-idle小于maximum-poop-size的时候才会起作用。默认值10分钟。
6.max-lifetime 连接池中连接的最大生命周期。当连接一致处于闲置状态时,数据库可能会主动断开连接。
7.connection-timeout 连接超时时间。默认值为30s,可以接收的最小超时时间为250ms。但是连接池请求也可以自定义超时时间

Druid:

Spring Boot 3 集成 Druid 连接池详解_springboot3 druid-CSDN博客
为监控而生的连接池:
导入依赖:springboot3

1
2
3
4
5
6
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-3-starter</artifactId>
<version>1.2.20</version>
</dependency>

测试数据源是否指定成功:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@SpringBootTest(args = "--mpw.key=fbc9c2430668ee2b")
public class DdTest {
@Autowired
DataSource dataSource;
@Test
void contextLoads() {
//查看数据源
System.out.println(dataSource.getClass());
//获得数据库连接
try {
Connection connection = dataSource.getConnection();
System.out.println(connection);
//关闭连接
connection.close();

} catch (SQLException e) {
e.printStackTrace();
}
}

}