Пул соединений
На уровне чистого 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 не закрывает соединение физически — он возвращает его обратно в пул для переиспользования. Реальное физическое закрытие происходит только когда пул решает уменьшить количество “дежурных” соединений (например, при простое) или при остановке приложения.
• разницу между DriverManager и DataSource, и что реально происходит при conn.close() с пулом (если дошёл до 2-го слоя).