Správa databázových připojení

Dotazování PostgreSQL databáze v Javě

Miller Trujillo

Staff Software Engineer

Proč je správa připojení důležitá?

$$

  • Každé připojení otevírá síťový soket
  • Vyžaduje autentizaci a alokaci zdrojů
  • Neuzavřená připojení způsobují úniky zdrojů
  • Nová připojení mohou selhat

Diagram znázorňující hromadící se databázová připojení, některá označena jako "zombie" – otevřená, ale nevyužitá

Dotazování PostgreSQL databáze v Javě

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)); } }
  • Připojení jsou uzavřena automaticky
Dotazování PostgreSQL databáze v Javě

Connection pooling

  • Nová připojení opakují nákladnou inicializaci
  • Pooling znovu využívá existující připojení
  • Po použití se připojení vrátí do poolu

Analogie se stanovištěm taxíků

Diagram znázorňující pool připojení s více předem vytvořenými připojeními a šipkami ukazujícími jejich zapůjčení a vrácení

Dotazování PostgreSQL databáze v Javě

Příklad 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!"); }
Dotazování PostgreSQL databáze v Javě

Výstup HikariCP do konzole

[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.
Dotazování PostgreSQL databáze v Javě

Pojďme cvičit!

Dotazování PostgreSQL databáze v Javě

Preparing Video For Download...