Карта / JDBC / Пул соединений

Пул соединений

На уровне чистого JDBC пул соединений настраивается вручную, отдельно от Spring Boot, который делает это автоматически через HikariCP (см. тему «Пулы (Hikari)»).

HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:postgresql://localhost:5432/mydb");
config.setUsername("user");
config.setPassword("password");
config.setMaximumPoolSize(10);

HikariDataSource dataSource = new HikariDataSource(config);

try (Connection conn = dataSource.getConnection()) {   // берём из пула
    // работа с conn
}   // возвращается в пул, не закрывается физически
Копнуть глубже

DataSource vs DriverManager. DriverManager.getConnection() (см. тему «Connection, Statement, ResultSet») создаёт новое физическое соединение каждый раз. DataSource (интерфейс, который реализует HikariDataSource) — абстракция над пулом: getConnection() берёт уже готовое соединение из пула, а не создаёт с нуля. Именно DataSource используется в реальных приложениях, DriverManager — больше для понимания основ и совсем простых скриптов.

conn.close() с DataSource не закрывает соединение физически — он возвращает его обратно в пул для переиспользования. Реальное физическое закрытие происходит только когда пул решает уменьшить количество “дежурных” соединений (например, при простое) или при остановке приложения.

🎤 Закрыл тему, если можешь объяснить:
• зачем нужен пул соединений на уровне JDBC;
• разницу между DriverManager и DataSource, и что реально происходит при conn.close() с пулом (если дошёл до 2-го слоя).