Ответ
В подавляющем большинстве случаев следует использовать пул соединений (connection pool), а не одно соединение.
Проблемы одного соединения:
- Боттлнек (узкое место): Все запросы ждут освобождения единственного соединения.
- Низкая производительность: Невозможность параллельного выполнения операций с БД.
- Ненадежность: Разрыв соединения приводит к полной неработоспособности приложения.
Преимущества пула соединений (HikariCP, Apache DBCP, Tomcat JDBC):
- Высокая производительность: Множество потоков могут работать с БД одновременно.
- Управление ресурсами: Пул создает, проверяет и переиспользует соединения.
- Гибкая настройка: Можно задать минимальный, максимальный размер пула, таймауты.
Пример настройки HikariCP (де-факто стандарт) в Spring Boot:
# application.yml
spring:
datasource:
hikari:
maximum-pool-size: 10 # Максимум соединений
minimum-idle: 5 # Минимум простаивающих соединений
connection-timeout: 30000 # Таймаут на получение соединения (мс)
idle-timeout: 600000 # Макс время простоя соединения (мс)
Когда может хватить одного соединения? Только в крайне простых, однопоточных приложениях (например, утилиты командной строки). Даже в этом случае использование пула с minimumIdle=1 и maximumPoolSize=1 обеспечивает стандартизированное управление жизненным циклом соединения.