Zarządzanie połączeniami z bazą danych

Zapytania do bazy danych PostgreSQL w Javie

Miller Trujillo

Staff Software Engineer

Dlaczego zarządzanie połączeniami jest ważne?

$$

  • Każde połączenie otwiera gniazdo sieciowe
  • Wymaga uwierzytelnienia i przydziału zasobów
  • Niedomknięte połączenia powodują wycieki zasobów
  • Tworzenie nowych połączeń może zakończyć się niepowodzeniem

Diagram przedstawiający narastające połączenia z bazą danych, z zaznaczonymi połączeniami „zombie" – otwartymi, lecz nieużywanymi

Zapytania do bazy danych PostgreSQL w Javie

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)); } }
  • Połączenia są zamykane automatycznie
Zapytania do bazy danych PostgreSQL w Javie

Pula połączeń

  • Nowe połączenia wiążą się z kosztowną konfiguracją
  • Pula połączeń pozwala na ich ponowne wykorzystanie
  • Połączenia wracają do puli po zakończeniu użycia

Analogia do postoju taksówek

Diagram przedstawiający pulę połączeń z wieloma wstępnie nawiązanymi połączeniami oraz strzałkami pokazującymi pobieranie i zwracanie połączeń

Zapytania do bazy danych PostgreSQL w Javie

Przykład 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!"); }
Zapytania do bazy danych PostgreSQL w Javie

Logi konsoli 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.
Zapytania do bazy danych PostgreSQL w Javie

Czas na ćwiczenia!

Zapytania do bazy danych PostgreSQL w Javie

Preparing Video For Download...