Управление подключениями к базе данных

Работа с базой данных PostgreSQL на Java

Miller Trujillo

Staff Software Engineer

Зачем управлять подключениями?

$$

  • Каждое подключение открывает сетевой сокет
  • Требует аутентификации и выделения ресурсов
  • Незакрытые подключения вызывают утечки ресурсов
  • Новые подключения могут завершаться ошибкой

Диаграмма, показывающая накопление подключений к базе данных, часть из которых помечена как «zombie» — открытые, но неиспользуемые

Работа с базой данных PostgreSQL на Java

try-with-resources

String sql = "SELECT COUNT(*) FROM books";


try (Connection conn = DriverManager.getConnection(url, user, password); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql)) {
if (rs.next()) { System.out.println("Total books: " + rs.getInt(1)); } }
  • Подключения закрываются автоматически
Работа с базой данных PostgreSQL на Java

Пул подключений

  • Каждое новое подключение требует затратной инициализации
  • Пул переиспользует уже открытые подключения
  • После использования подключение возвращается в пул

Аналогия со стоянкой такси

Диаграмма пула подключений с несколькими заранее установленными соединениями; стрелки показывают, как подключения берутся из пула и возвращаются обратно

Работа с базой данных PostgreSQL на Java

Пример HikariCP

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;


HikariConfig config = new HikariConfig(); config.setJdbcUrl("jdbc:postgresql://localhost:5432/library"); config.setUsername("postgres"); config.setPassword("secret");
HikariDataSource ds = new HikariDataSource(config);
try (Connection conn = ds.getConnection()) { System.out.println("Connected with HikariCP!"); }
Работа с базой данных PostgreSQL на Java

Логи HikariCP в консоли

[main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting...
[main] INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - 
    Added connection org.postgresql.jdbc.PgConnection@ID
[main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed.
Работа с базой данных PostgreSQL на Java

Давайте потренируемся!

Работа с базой данных PostgreSQL на Java

Preparing Video For Download...