Spring Boot 默认使用的数据库连接池是 HikariCP(开源库地址)。
HikariCP 是目前性能最好的连接池之一,它具有高度的性能、可靠性和可扩展性,并且对于大多数应用场景来说效果非常好。在 Spring Boot 中,只需要在配置文件中进行相应的配置,即可使用 HikariCP 进行数据库连接池管理。
默认情况下,HikariCP连接池的最大连接数被设置为10。这意味着在同一时间点,最多可以有10个连接可供使用。当所有连接都被占用时,后续的连接请求将会被阻塞,直到有一个连接可用为止。
Spring Boot项目如何进行具体的数据库连接池配置
在Spring Boot中,可以通过以下方式配置数据库连接和连接池:
配置数据库连接信息:在application.properties中配置数据库连接信息,如下所示:
spring.datasource.url=jdbc:mysql://localhost:3306/testdb
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
其中,url是数据库连接的URL,username和password是登录数据库的用户名和密码,driver-class-name是数据库驱动的类名。
配置连接池:在application.properties中配置连接池信息,如下所示:
spring.datasource.hikari.connection-timeout=5000
spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.pool-size=100
spring.datasource.hikari.minimum-idle=10
spring.datasource.hikari.maximum-pool-size=100
spring.datasource.hikari.transaction-isolation=TRANSACTION_READ_COMMITTED
其中,connection-timeout是连接超时时间,idle-timeout是空闲连接池的超时时间,pool-size是连接池的大小,minimum-idle是连接池中最小的空闲连接数,maximum-pool-size是连接池中最大的连接数,transaction-isolation是事务隔离级别。
配置连接池类型:在application.properties中配置连接池类型,如下所示:
spring.datasource.type=com.hikari.HikariDataSource
其中,type属性指定了连接池的类型为HikariDataSource。
编写代码测试连接池的性能
import org.junit.Test;
import org.junit.runner.RunWith;
?
import static org.mockito.Mockito.*;
?
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
?
@RunWith(MockitoJUnitRunner.class)
public class HikariCPPerformanceTest {
?
? ? @Mock
? ? private HikariDataSource dataSource;
?
? ? @Test
? ? public void testPerformance() {
? ? ? ? // 设置连接池大小为100,连接超时时间为5秒
? ? ? ? when(dataSource.getConnection()).thenReturn(mock(Connection.class));
? ? ? ? for (int i = 0; i < 1000; i++) {
? ? ? ? ? ? // 模拟并发请求100个连接
? ? ? ? ? ? new Thread(() -> {
? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? Connection connection = dataSource.getConnection();
? ? ? ? ? ? ? ? ? ? // 执行SQL语句
? ? ? ? ? ? ? ? ? ? connection.close();
? ? ? ? ? ? ? ? } catch (SQLException e) {
? ? ? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }).start();
? ? ? ? }
? ? ? ? // 等待所有线程执行完成
? ? ? ? try {
? ? ? ? ? ? for (int i = 0; i < 1000; i++) {
? ? ? ? ? ? ? ? Thread.sleep(100);
? ? ? ? ? ? }
? ? ? ? } catch (InterruptedException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? ? ? // 验证连接池是否正常工作
? ? ? ? verify(dataSource, times(1000)).getConnection();
? ? }
}
上述代码通过Mockito框架来模拟HikariDataSource对象,并模拟了100个并发请求,每个请求执行一次数据库连接操作。通过等待所有线程执行完成并验证连接池是否正常工作来进行性能测试。
原文链接:https://blog.csdn.net/chris3will/article/details/132382779
?