Ответ
Hibernate не реализует пул соединений самостоятельно, а делегирует эту задачу внешним библиотекам. Настройка зависит от провайдера.
1. Выбор и зависимость провайдера (на примере HikariCP — стандарт в Spring Boot):
<!-- Maven: pom.xml -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency>
2. Настройка в application.properties (Spring Boot):
# Spring Boot автоматически использует HikariCP при его наличии в classpath
spring.datasource.hikari.connection-timeout=30000 # Таймаут получения соединения (мс)
spring.datasource.hikari.minimum-idle=5 # Минимальное количество простаивающих соединений
spring.datasource.hikari.maximum-pool-size=20 # Максимальный размер пула
spring.datasource.hikari.idle-timeout=600000 # Таймаут простаивания соединения (мс)
spring.datasource.hikari.max-lifetime=1800000 # Максимальное время жизни соединения (мс)
3. Настройка в hibernate.cfg.xml (чистый Hibernate):
<property name="hibernate.connection.provider_class">
org.hibernate.hikaricp.internal.HikariCPConnectionProvider
</property>
<property name="hibernate.hikari.maximumPoolSize">20</property>
<property name="hibernate.hikari.dataSourceClassName">com.mysql.cj.jdbc.MysqlDataSource</property>
<property name="hibernate.hikari.dataSource.url">jdbc:mysql://localhost:3306/db</property>
Основные параметры для тюнинга:
maximum-pool-size: Главный параметр. Слишком большой пул может перегрузить БД, слишком маленький — вызвать нехватку соединений.connection-timeout: Время ожидания свободного соединения. Если истёк —SQLTimeoutException.idle-timeoutиmax-lifetime: Помогают очищать "устаревшие" соединения и переподключаться.
Best practice: Мониторьте метрики пула (активные/простаивающие соединения, время ожидания) под нагрузкой для точной настройки.