Pengumpulan Koneksi dengan HikariCP
Gunakan kembali koneksi secara efisien.
Pengumpulan Koneksi dengan HikariCP adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.
Mengapa Menggunakan Kumpulan Koneksi?
Membuka koneksi basis data membutuhkan biaya besar: jabat tangan TCP, autentikasi, dan penyiapan sesi dapat memerlukan puluhan milidetik.
Kumpulan koneksi menyimpan sejumlah koneksi terbuka yang siap digunakan. Kode Anda meminjam satu koneksi, menggunakannya, lalu mengembalikannya — mengubah pembukaan yang mahal menjadi peminjaman yang murah.
Mengenal HikariCP
HikariCP adalah standar umum untuk kumpulan koneksi Java. Ukurannya kecil, cepat, dan menjadi bawaan Spring Boot.
HikariCP menerapkan javax.sql.DataSource, sehingga kode JDBC lainnya tetap sama — Anda hanya mendapatkan koneksi dari kumpulan, bukan dari DriverManager.
Mengonfigurasi Kumpulan Koneksi
Anda mengonfigurasi HikariCP dengan objek HikariConfig: URL JDBC, kredensial, dan ukuran kumpulan koneksi.
Kemudian Anda membuat HikariDataSource dari objek tersebut. Biasanya hal ini dilakukan sekali saat aplikasi dimulai dan kemudian digunakan bersama.
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 Koneksi
Panggil ds.getConnection() untuk meminjam koneksi. Bungkus dalam konstruksi try-dengan-sumber daya seperti biasa.
Inilah hal pentingnya: menutup koneksi dari kumpulan tidak menutup soket fisiknya — koneksi tersebut dikembalikan ke kumpulan untuk digunakan kembali.
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() Berarti Mengembalikan
Hal ini sering membingungkan banyak pengembang. Dengan kumpulan koneksi:
conn.close()mengembalikan koneksi ke kumpulan.- Kumpulan menjaga soket sebenarnya tetap terbuka untuk peminjam berikutnya.
Jadi, Anda tetap harus selalu menutup koneksi — try-dengan-sumber daya adalah cara yang benar. Anda sedang mengembalikannya, bukan memusnahkannya.
Menentukan Ukuran Kumpulan Koneksi
Lebih besar bukan berarti lebih baik. Kumpulan yang terlalu besar membebani basis data dengan pekerjaan bersamaan.
Pedoman HikariCP: kumpulan kecil, sering kali sekitar (core_count * 2) + effective_spindle_count, biasanya mengungguli kumpulan yang sangat besar. maximumPoolSize adalah batas atasnya; minimumIdle menjaga beberapa koneksi tetap siap.
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);
}
}Batas Waktu Utama
HikariCP menyediakan batas waktu yang melindungi aplikasi Anda dari basis data yang macet:
connectionTimeout— berapa lama peminjaman menunggu sebelum gagal (bawaan 30 detik).idleTimeout— berapa lama koneksi yang tidak aktif tetap hidup.maxLifetime— menarik koneksi setelah mencapai usia ini (pertahankan nilainya di bawah batas waktu milik basis data).
Validasi Koneksi
Jaringan dapat memutus koneksi secara diam-diam. Sebelum memberikannya, HikariCP dapat memvalidasi koneksi tersebut.
Driver JDBC modern menggunakan Connection.isValid(timeout); HikariCP memanggilnya secara otomatis. Anda juga dapat menetapkan connectionTestQuery untuk driver lama yang tidak memiliki isValid.
Deteksi Kebocoran
Kebocoran koneksi terjadi ketika kode meminjam koneksi tetapi tidak pernah menutupnya — pada akhirnya kumpulan koneksi kehabisan koneksi dan setiap peminjaman mengalami batas waktu.
Tetapkan leakDetectionThreshold (misalnya 20000 ms), lalu HikariCP akan mencatat jejak tumpukan untuk koneksi apa pun yang dipertahankan lebih lama dari itu dan langsung menunjukkan kode penyebabnya.
Satu Kumpulan per Aplikasi
Buat HikariDataSource sekali dan gunakan kembali selama masa hidup seluruh aplikasi.
Membuat kumpulan baru untuk setiap permintaan menggagalkan tujuannya — Anda harus membayar biaya awal setiap kali. Tutup kumpulan hanya saat aplikasi dimatikan dengan ds.close().
Memantau Kumpulan Koneksi
HikariCP menyediakan metrik saat berjalan sehingga Anda dapat memantau kesehatan kumpulan.
- Koneksi aktif, tidak aktif, dan total.
- Utas yang sedang menunggu koneksi.
HikariCP terintegrasi dengan Micrometer, Dropwizard Metrics, dan JMX. Jumlah 'menunggu' yang terus-menerus tinggi berarti kumpulan terlalu kecil atau koneksi dipertahankan terlalu lama.
Pemeriksaan Singkat
Saat menggunakan HikariCP, apa yang dilakukan oleh pemanggilan close() pada koneksi yang dipinjam?
Ringkasan
HikariCP membuat penggunaan kembali koneksi menjadi efisien:
- Konfigurasikan
HikariDataSourcesekali saat aplikasi dimulai. - Pinjam dengan
getConnection()dalam konstruksi try-dengan-sumber daya;close()mengembalikannya ke kumpulan. - Jaga
maximumPoolSizetetap moderat. - Sesuaikan
connectionTimeout,maxLifetime, dan validasi. - Gunakan
leakDetectionThresholduntuk menemukan koneksi yang tidak dikembalikan.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pengumpulan Koneksi dengan HikariCP” gratis?
Ya — teks lengkap “Pengumpulan Koneksi dengan HikariCP” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pengumpulan Koneksi dengan HikariCP”?
Gunakan kembali koneksi secara efisien. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Java Academy?
Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Pengumpulan Koneksi dengan HikariCP” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Dasar-Dasar JDBC
- PreparedStatement
- Transaksi
- Pengumpulan Koneksi dengan HikariCP