Java Academy · Pelajaran

Pengumpulan Sambungan dengan HikariCP

Guna semula sambungan dengan cekap

Pelajaran 4 daripada 413 langkah

Pengumpulan Sambungan dengan HikariCP ialah pelajaran Java Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Java Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Java Academy merangkumi sejumlah 4 pelajaran.

Mengapa Menggunakan Kumpulan Sambungan?

Membuka sambungan pangkalan data memerlukan kos yang tinggi: jabat tangan TCP, pengesahan dan penyediaan sesi boleh mengambil masa puluhan milisaat.

Kumpulan sambungan menyimpan sekumpulan sambungan terbuka yang sedia digunakan. Kod Anda meminjam satu sambungan, menggunakannya dan memulangkannya — menjadikan pembukaan yang mahal sebagai peminjaman yang murah.

Kenali HikariCP

HikariCP ialah piawaian tidak rasmi bagi kumpulan sambungan untuk Java. Ia kecil, pantas dan menjadi lalai dalam Spring Boot.

Ia melaksanakan javax.sql.DataSource, jadi kod JDBC Anda yang lain kekal sama — Anda hanya mendapatkan sambungan daripada kumpulan dan bukannya DriverManager.

Mengkonfigurasi Kumpulan

Anda mengkonfigurasi HikariCP dengan objek HikariConfig: URL JDBC, kelayakan dan saiz kumpulan.

Kemudian Anda mencipta HikariDataSource daripadanya. Biasanya ini dilakukan sekali ketika aplikasi dimulakan dan dikongsi.

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

public class Main {
    public static void main(String[] args) {
        HikariConfig config = new HikariConfig();
        config.setJdbcUrl("jdbc:postgresql://localhost:5432/shop");
        config.setUsername("app");
        config.setPassword("secret");
        config.setMaximumPoolSize(10);
        HikariDataSource ds = new HikariDataSource(config);
        System.out.println("Pool ready, max size " + config.getMaximumPoolSize());
        ds.close();
    }
}

Meminjam Sambungan

Panggil ds.getConnection() untuk meminjam sambungan. Bungkusnya dalam struktur cuba-dengan-sumber seperti biasa.

Inilah perkara penting: menutup sambungan daripada kumpulan tidak menutup soket fizikal — sambungan itu dikembalikan kepada kumpulan untuk digunakan semula.

import com.zaxxer.hikari.HikariDataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.sql.DataSource;

public class Main {
    public static void main(String[] args) {
        DataSource ds = new HikariDataSource();
        try (Connection conn = ds.getConnection();
             PreparedStatement ps = conn.prepareStatement("SELECT count(*) FROM users");
             ResultSet rs = ps.executeQuery()) {
            if (rs.next()) System.out.println("Users: " + rs.getInt(1));
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }
    }
}

close() Bermaksud Memulangkan

Perkara ini mengelirukan ramai pembangun. Dengan kumpulan:

  • conn.close() memulangkan sambungan kepada kumpulan.
  • Kumpulan memastikan soket sebenar kekal terbuka untuk peminjam seterusnya.

Jadi, Anda masih perlu sentiasa menutup sambungan — cuba-dengan-sumber ialah pendekatan yang betul. Anda sedang memulangkannya, bukan memusnahkannya.

Menentukan Saiz Kumpulan

Lebih besar tidak semestinya lebih baik. Kumpulan yang terlalu besar membebankan pangkalan data dengan kerja serentak.

Panduan HikariCP: kumpulan kecil, selalunya sekitar (core_count * 2) + effective_spindle_count, biasanya lebih baik daripada kumpulan yang sangat besar. maximumPoolSize ialah had maksimum; minimumIdle mengekalkan beberapa sambungan yang sedia digunakan.

public class Main {
    public static void main(String[] args) {
        int cores = 4;
        int spindles = 1; // SSD-ish
        int recommended = (cores * 2) + spindles;
        System.out.println("Suggested max pool size: " + recommended);
    }
}

Had Masa Utama

HikariCP menyediakan had masa yang melindungi aplikasi Anda daripada pangkalan data yang tersekat:

  • connectionTimeout — tempoh peminjaman menunggu sebelum gagal (lalai 30s).
  • idleTimeout — tempoh sambungan tidak aktif kekal hidup.
  • maxLifetime — menamatkan penggunaan sambungan selepas tempoh ini (pastikan nilainya lebih rendah daripada had masa pangkalan data sendiri).

Pengesahan Sambungan

Rangkaian boleh memutuskan sambungan tanpa amaran. Sebelum meminjamkan sambungan, HikariCP boleh mengesahkannya.

Pemacu JDBC moden menggunakan Connection.isValid(timeout); HikariCP memanggilnya secara automatik. Anda juga boleh menetapkan connectionTestQuery untuk pemacu lama yang tidak mempunyai isValid.

Pengesanan Kebocoran

Kebocoran sambungan berlaku apabila kod meminjam sambungan tetapi tidak pernah menutupnya — akhirnya kumpulan kehabisan sambungan dan setiap peminjaman tamat tempoh.

Tetapkan leakDetectionThreshold (contohnya 20000 ms), lalu HikariCP akan merekodkan jejak tindanan bagi setiap sambungan yang dipegang lebih lama daripada tempoh tersebut dan terus menunjukkan kod yang bermasalah.

Satu Kumpulan bagi Setiap Aplikasi

Cipta HikariDataSource sekali dan gunakannya semula sepanjang hayat aplikasi.

Mencipta kumpulan baharu bagi setiap permintaan menggagalkan tujuan asal — Anda perlu membayar kos permulaan setiap kali. Tutup kumpulan hanya ketika penutupan aplikasi dengan ds.close().

Memantau Kumpulan

HikariCP menyediakan metrik masa jalan supaya Anda dapat memantau kesihatan kumpulan.

  • Sambungan aktif, tidak aktif dan keseluruhan.
  • Utas yang sedang menunggu sambungan.

Ia bersepadu dengan Micrometer, Dropwizard Metrics dan JMX. Bilangan sambungan yang 'menunggu' dan kekal tinggi bermakna kumpulan terlalu kecil atau sambungan dipegang terlalu lama.

Semakan Pantas

Apabila menggunakan HikariCP, apakah yang dilakukan oleh panggilan close() pada sambungan yang dipinjam?

Ringkasan

HikariCP menjadikan penggunaan semula sambungan lebih cekap:

  • Konfigurasikan HikariDataSource sekali semasa permulaan aplikasi.
  • Pinjam dengan getConnection() dalam cuba-dengan-sumber; close() memulangkannya kepada kumpulan.
  • Pastikan maximumPoolSize sederhana.
  • Laraskan connectionTimeout, maxLifetime dan pengesahan.
  • Gunakan leakDetectionThreshold untuk mengesan sambungan yang tidak dipulangkan.
Percuma untuk bermula

Pelajari Java dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
104
Pelajaran
374

Soalan Lazim

Adakah pelajaran “Pengumpulan Sambungan dengan HikariCP” percuma?

Ya — teks penuh “Pengumpulan Sambungan dengan HikariCP” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Java Academy, tingkat taraf kepada CoddyKit PRO. Kursus Java Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Pengumpulan Sambungan dengan HikariCP”?

Guna semula sambungan dengan cekap Anda berlatih Java Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Java Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Java Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.

Berapa lamakah pelajaran “Pengumpulan Sambungan dengan HikariCP” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Java Academy ini?

Ya. Setiap pelajaran Java Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Asas JDBC
  2. PreparedStatement
  3. Transaksi
  4. Pengumpulan Sambungan dengan HikariCP
← Kembali ke Java Academy