HikariCP ile Bağlantı Havuzlama
Verimli bağlantı yeniden kullanımı
HikariCP ile Bağlantı Havuzlama, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.
Bağlantı Havuzu Neden Kullanılır?
Bir veritabanı bağlantısı açmak pahalıdır: TCP el sıkışması, kimlik doğrulama ve oturum kurulumu onlarca milisaniye sürebilir.
Bağlantı havuzu, bir grup açık bağlantıyı hazır tutar. Kodunuz bir bağlantıyı havuzdan alır, kullanır ve geri verir; böylece maliyetli bir açma işlemi, ucuz bir teslim alma işlemine dönüşür.
HikariCP ile Tanışın
HikariCP, Java için fiilî standart havuzdur. Küçük ve hızlıdır; ayrıca Spring Boot'ta varsayılan olarak kullanılır.
javax.sql.DataSource arabirimini uygular; bu nedenle JDBC kodunuzun geri kalanı aynı kalır — yalnızca bağlantıları DriverManager yerine havuzdan alırsınız.
Havuzu Yapılandırma
HikariCP'yi bir HikariConfig nesnesiyle yapılandırırsınız: JDBC URL'si, kimlik bilgileri ve havuz boyutu.
Ardından bundan bir HikariDataSource oluşturursunuz. Bu işlem genellikle uygulama başlatılırken bir kez yapılır ve oluşturulan kaynak paylaşılır.
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();
}
}Bağlantı Alma
Bağlantı almak için ds.getConnection() çağırın. Bunu her zamanki gibi try-with-resources yapısıyla sarmalayın.
Buradaki temel fikir şudur: havuzdaki bir bağlantıyı kapatmak fiziksel soketi kapatmaz; bağlantıyı yeniden kullanılmak üzere havuza geri verir.
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() İade Demektir
Bu konu birçok geliştiricinin kafasını karıştırır. Havuz kullanıldığında:
conn.close()bağlantıyı havuza geri verir.- Havuz, gerçek soketi sonraki kullanıcı için açık tutar.
Bu nedenle bağlantıyı yine de her zaman kapatmalısınız; try-with-resources kullanmak doğrudur. Bağlantıyı yok etmiyor, geri veriyorsunuz.
Havuz Boyutlandırma
Büyük olması daha iyi olduğu anlamına gelmez. Gereğinden büyük bir havuz, eşzamanlı çalışma yüküyle veritabanını aşırı zorlar.
HikariCP'nin önerisine göre genellikle (core_count * 2) + effective_spindle_count civarında küçük bir havuz, çok büyük bir havuzdan daha iyi sonuç verir. maximumPoolSize üst sınırı belirler; minimumIdle ise birkaç bağlantıyı hazır tutar.
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);
}
}Temel Zaman Aşımları
HikariCP, uygulamanızı yanıt vermeyen bir veritabanına karşı koruyan zaman aşımı ayarları sunar:
connectionTimeout— başarısız olmadan önce bağlantı alma işleminin ne kadar bekleyeceği (varsayılan 30 sn).idleTimeout— boşta bir bağlantının ne kadar süre yaşayacağı.maxLifetime— bu yaşa ulaşınca bağlantıyı kullanımdan çıkarır (veritabanının kendi zaman aşımından düşük tutun).
Bağlantı Doğrulama
Ağ bağlantıları sessizce kesebilir. HikariCP, bir bağlantıyı teslim etmeden önce doğrulayabilir.
Modern JDBC sürücüleri Connection.isValid(timeout) kullanır; HikariCP bunu otomatik olarak çağırır. isValid desteği olmayan eski sürücüler için connectionTestQuery de ayarlayabilirsiniz.
Sızıntı Algılama
Bağlantı sızıntısı, kod bir bağlantıyı alıp hiç kapatmadığında oluşur; sonunda havuzdaki bağlantılar tükenir ve her bağlantı alma işlemi zaman aşımına uğrar.
leakDetectionThreshold değerini ayarlayın (ör. 20000 ms); HikariCP, bu süreden daha uzun süre tutulan her bağlantı için bir yığın izi günlüğe kaydeder ve soruna neden olan kodu doğrudan gösterir.
Uygulama Başına Bir Havuz
HikariDataSource nesnesini bir kez oluşturun ve uygulamanın tüm ömrü boyunca yeniden kullanın.
Her istek için yeni bir havuz oluşturmak amacın tam tersidir; her seferinde başlatma maliyetini ödersiniz. Havuzu yalnızca kapanış sırasında ds.close() ile kapatın.
Havuzu İzleme
HikariCP, havuzun durumunu izleyebilmeniz için çalışma zamanı ölçümleri sunar.
- Etkin, boşta ve toplam bağlantı sayıları.
- Şu anda bir bağlantı bekleyen iş parçacıkları.
Micrometer, Dropwizard Metrics ve JMX ile tümleşir. Sürekli yüksek bir 'bekleyen' sayısı, havuzun çok küçük olduğunu veya bağlantıların gereğinden uzun süre tutulduğunu gösterir.
Kısa Kontrol
HikariCP kullanırken, havuzdan alınmış bir bağlantıda close() çağırmak ne yapar?
Özet
HikariCP, bağlantıların yeniden kullanımını verimli hâle getirir:
- Başlangıçta bir kez
HikariDataSourceyapılandırın. - Try-with-resources içinde
getConnection()ile bağlantı alın;close()bağlantıyı havuza geri verir. maximumPoolSizedeğerini makul ölçüde küçük tutun.connectionTimeout,maxLifetimeve doğrulama ayarlarını düzenleyin.- Geri verilmeyen bağlantıları yakalamak için
leakDetectionThresholdkullanın.
Sıkça Sorulan Sorular
“HikariCP ile Bağlantı Havuzlama” dersi ücretsiz mi?
Evet — “HikariCP ile Bağlantı Havuzlama” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.
“HikariCP ile Bağlantı Havuzlama” dersinde ne öğreneceğim?
Verimli bağlantı yeniden kullanımı Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Java Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“HikariCP ile Bağlantı Havuzlama” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- JDBC Temelleri
- PreparedStatement
- İşlemler
- HikariCP ile Bağlantı Havuzlama