Pengumpulan Sambungan dengan HikariCP
Guna semula sambungan dengan cekap
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
HikariDataSourcesekali semasa permulaan aplikasi. - Pinjam dengan
getConnection()dalam cuba-dengan-sumber;close()memulangkannya kepada kumpulan. - Pastikan
maximumPoolSizesederhana. - Laraskan
connectionTimeout,maxLifetimedan pengesahan. - Gunakan
leakDetectionThresholduntuk mengesan sambungan yang tidak dipulangkan.
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
- Asas JDBC
- PreparedStatement
- Transaksi
- Pengumpulan Sambungan dengan HikariCP