Cepat, sederhana, dapat diandalkan. HikariCP adalah kumpulan koneksi JDBC siap produksi "zero-overhead". Dengan ukuran sekitar 165Kb, perpustakaan ini sangat ringan. Baca tentang bagaimana kami melakukannya di sini.
"Kesederhanaan adalah prasyarat untuk keandalan."
- Dr.Edsger Dijkstra
Penting
Untuk menghindari kondisi langka di mana kumpulan menjadi nol dan tidak pulih, maka perlu mengkonfigurasi TCP keepalive . Beberapa driver JDBC mendukung ini melalui properti, misalnya tcpKeepAlive=true
di PostgreSQL, namun bagaimanapun juga, ini juga dapat dikonfigurasi di tingkat OS. Lihat Mengatur OS TCP Keepalive dan/atau TCP keepalive untuk pengalaman PostgreSQL yang lebih baik.
Artefak pakar Java 11+ :
< dependency >
< groupId >com.zaxxer</ groupId >
< artifactId >HikariCP</ artifactId >
< version >6.2.1</ version >
</ dependency >
Artefak pakar Java 8 ( mode pemeliharaan ):
< dependency >
< groupId >com.zaxxer</ groupId >
< artifactId >HikariCP</ artifactId >
< version >4.0.3</ version >
</ dependency >
Artefak pakar Java 7 ( mode pemeliharaan ):
< dependency >
< groupId >com.zaxxer</ groupId >
< artifactId >HikariCP-java7</ artifactId >
< version >2.4.13</ version >
</ dependency >
Artefak pakar Java 6 ( mode pemeliharaan ):
< dependency >
< groupId >com.zaxxer</ groupId >
< artifactId >HikariCP-java6</ artifactId >
< version >2.3.13</ version >
</ dependency >
Atau unduh dari sini.
Microbenchmark dibuat untuk mengisolasi dan mengukur overhead kumpulan menggunakan kerangka microbenchmark JMH. Anda dapat memeriksa proyek benchmark HikariCP untuk mengetahui detailnya dan meninjau/menjalankan sendiri benchmark tersebut.
DataSource.getConnection()
/ Connection.close()
tunggal.Connection.prepareStatement()
, Statement.execute()
, Statement.close()
.Analisis HikariCP v2.6, dibandingkan dengan kumpulan lainnya, dalam kaitannya dengan beban "lonjakan permintaan" yang unik.
Lingkungan pelanggan memberlakukan biaya yang tinggi untuk akuisisi koneksi baru, dan persyaratan untuk kumpulan berukuran dinamis, namun tetap memerlukan respons terhadap lonjakan permintaan. Baca tentang penanganan lonjakan permintaan di sini.
AKA "Apa yang mungkin tidak Anda ketahui tentang ukuran kumpulan koneksi" . Tonton video dari grup Oracle Real-world Performance, dan pelajari mengapa koneksi database tidak perlu terlalu banyak seperti biasanya. Faktanya, terlalu banyak koneksi mempunyai dampak negatif yang jelas dan nyata terhadap kinerja; perbedaan 50x dalam kasus demonstrasi Oracle. Baca terus untuk mencari tahu.
Kami ingin mengucapkan terima kasih kepada orang-orang di WIX atas tulisan mendalam dan tidak diminta tentang HikariCP di blog teknik mereka. Lihatlah jika Anda punya waktu.
Baca tantangan kumpulan "Database down" kami yang menarik.
Perangkat lunak sumber terbuka seperti HikariCP, seperti produk lainnya, bersaing di pasar bebas. Kami mengerti. Kami memahami bahwa kemajuan produk, setelah dipublikasikan, sering kali dikooptasi. Dan kami memahami bahwa ide bisa muncul dari zeitgeist; secara bersamaan dan mandiri. Namun lini masa inovasi, khususnya dalam proyek sumber terbuka, juga jelas dan kami ingin pengguna memahami arah aliran inovasi di ruang kami. Memang menyedihkan melihat hasil dari ratusan jam pemikiran dan penelitian dikooptasi dengan begitu mudahnya, dan mungkin hal ini melekat dalam pasar bebas, namun kita tidak mengalami demoralisasi. Kami termotivasi; untuk memperlebar kesenjangan.
HikariCP hadir dengan standar yang wajar dan berkinerja baik di sebagian besar penerapan tanpa penyesuaian tambahan. Setiap properti bersifat opsional, kecuali untuk "penting" yang ditandai di bawah.
? HikariCP menggunakan milidetik untuk semua nilai waktu.
HikariCP mengandalkan pengatur waktu yang akurat untuk kinerja dan keandalan. Server Anda harus disinkronkan dengan sumber waktu seperti server NTP. Terutama jika server Anda berjalan di dalam mesin virtual. Mengapa? Baca lebih lanjut di sini. Jangan mengandalkan pengaturan hypervisor untuk "menyinkronkan" jam mesin virtual. Konfigurasikan sinkronisasi sumber waktu di dalam mesin virtual. Jika Anda datang meminta dukungan pada suatu masalah yang ternyata disebabkan oleh kurangnya waktu sinkronisasi, Anda akan diejek secara publik di Twitter.
? dataSourceClassName
Ini adalah nama kelas DataSource
yang disediakan oleh driver JDBC. Lihat dokumentasi driver JDBC spesifik Anda untuk mendapatkan nama kelas ini, atau lihat tabel di bawah. Catatan Sumber data XA tidak didukung. XA membutuhkan manajer transaksi nyata seperti bitronix. Perhatikan bahwa Anda tidak memerlukan properti ini jika Anda menggunakan jdbcUrl
untuk konfigurasi driver JDBC berbasis DriverManager "jadul". Bawaan: tidak ada
- atau -
? jdbcUrl
Properti ini mengarahkan HikariCP untuk menggunakan konfigurasi "berbasis DriverManager". Kami merasa bahwa konfigurasi berbasis DataSource (di atas) lebih unggul karena berbagai alasan (lihat di bawah), namun untuk banyak penerapan, terdapat sedikit perbedaan yang signifikan. Saat menggunakan properti ini dengan driver "lama", Anda mungkin juga perlu menyetel properti driverClassName
, tetapi coba dulu tanpa. Perhatikan bahwa jika properti ini digunakan, Anda masih dapat menggunakan properti DataSource untuk mengonfigurasi driver Anda dan sebenarnya direkomendasikan melalui parameter driver yang ditentukan dalam URL itu sendiri. Bawaan: tidak ada
? username
Properti ini menetapkan nama pengguna autentikasi default yang digunakan saat memperoleh Koneksi dari driver yang mendasarinya. Perhatikan bahwa untuk DataSources ini bekerja dengan cara yang sangat deterministik dengan memanggil DataSource.getConnection(*username*, password)
pada DataSource yang mendasarinya. Namun, untuk konfigurasi berbasis Driver, setiap driver berbeda-beda. Dalam kasus berbasis Driver, HikariCP akan menggunakan properti username
ini untuk menyetel properti user
di Properties
yang diteruskan ke panggilan DriverManager.getConnection(jdbcUrl, props)
driver. Jika ini bukan yang Anda butuhkan, lewati metode ini sepenuhnya dan panggil addDataSourceProperty("username", ...)
, misalnya. Bawaan: tidak ada
? password
Properti ini menetapkan kata sandi autentikasi default yang digunakan saat memperoleh Koneksi dari driver yang mendasarinya. Perhatikan bahwa untuk DataSources ini bekerja dengan cara yang sangat deterministik dengan memanggil DataSource.getConnection(username, *password*)
pada DataSource yang mendasarinya. Namun, untuk konfigurasi berbasis Driver, setiap driver berbeda-beda. Dalam kasus berbasis Driver, HikariCP akan menggunakan properti password
ini untuk menyetel properti password
di Properties
yang diteruskan ke panggilan DriverManager.getConnection(jdbcUrl, props)
driver. Jika ini bukan yang Anda butuhkan, lewati metode ini sepenuhnya dan panggil addDataSourceProperty("pass", ...)
, misalnya. Bawaan: tidak ada
✅ autoCommit
Properti ini mengontrol perilaku komit otomatis default dari koneksi yang dikembalikan dari kumpulan. Ini adalah nilai boolean. Bawaan: benar
⏳ connectionTimeout
habis
Properti ini mengontrol jumlah maksimum milidetik yang klien (yaitu Anda) akan menunggu koneksi dari kumpulan. Jika waktu ini terlampaui tanpa tersedianya koneksi, SQLException akan dilempar. Batas waktu koneksi terendah yang dapat diterima adalah 250 ms. Default: 30000 (30 detik)
⏳ idleTimeout
Properti ini mengontrol jumlah waktu maksimum koneksi diperbolehkan untuk diam di kumpulan. Pengaturan ini hanya berlaku ketika minimumIdle
didefinisikan kurang dari maximumPoolSize
. Koneksi menganggur tidak akan dihentikan setelah kumpulan mencapai koneksi minimumIdle
. Apakah koneksi dihentikan saat menganggur atau tidak, bergantung pada variasi maksimum +30 detik, dan variasi rata-rata +15 detik. Koneksi tidak akan pernah dihentikan dalam keadaan menganggur sebelum batas waktu ini habis. Nilai 0 berarti koneksi yang menganggur tidak pernah dihapus dari kumpulan. Nilai minimum yang diperbolehkan adalah 10000ms (10 detik). Default: 600000 (10 menit)
⏳ keepaliveTime
Properti ini mengontrol seberapa sering HikariCP mencoba menjaga koneksi tetap hidup, untuk mencegah waktu habis oleh database atau infrastruktur jaringan. Nilai ini harus lebih kecil dari nilai maxLifetime
. Sebuah "keepalive" hanya akan terjadi pada koneksi menganggur. Ketika waktunya tiba untuk "keepalive" terhadap koneksi tertentu, koneksi tersebut akan dihapus dari pool, "ping", dan kemudian dikembalikan ke pool. 'Ping' adalah salah satu dari: pemanggilan metode JDBC4 isValid()
, atau eksekusi connectionTestQuery
. Biasanya, durasi out-of-the-pool harus diukur dalam satu digit milidetik atau bahkan sub-milidetik, dan oleh karena itu, dampak kinerjanya harus kecil atau tidak sama sekali. Nilai minimum yang diperbolehkan adalah 30000ms (30 detik), namun nilai dalam rentang menit adalah yang paling diinginkan. Default: 120000 (2 menit)
⏳ maxLifetime
Properti ini mengontrol masa pakai maksimum koneksi di kumpulan. Koneksi yang sedang digunakan tidak akan pernah dihentikan, hanya ketika ditutup, koneksi tersebut akan dihapus. Berdasarkan koneksi demi koneksi, redaman negatif kecil diterapkan untuk menghindari kepunahan massal di kumpulan. Kami sangat menyarankan untuk menetapkan nilai ini, dan nilai ini harus beberapa detik lebih pendek dari batas waktu koneksi yang diberlakukan pada basis data atau infrastruktur mana pun. Nilai 0 menunjukkan tidak ada masa pakai maksimum (masa pakai tak terbatas), tentu saja tergantung pada pengaturan idleTimeout
. Nilai minimum yang diperbolehkan adalah 30000ms (30 detik). Default: 1800000 (30 menit)
? connectionTestQuery
Jika driver Anda mendukung JDBC4, kami sangat menyarankan untuk tidak mengatur properti ini. Ini untuk driver "lama" yang tidak mendukung JDBC4 Connection.isValid() API
. Ini adalah kueri yang akan dieksekusi sebelum koneksi diberikan kepada Anda dari kumpulan untuk memvalidasi bahwa koneksi ke database masih aktif. Sekali lagi, coba jalankan pool tanpa properti ini, HikariCP akan mencatat kesalahan jika driver Anda tidak mematuhi JDBC4 untuk memberi tahu Anda. Bawaan: tidak ada
? minimumIdle
Properti ini mengontrol jumlah minimum koneksi menganggur yang coba dipertahankan oleh HikariCP di kumpulan. Jika koneksi menganggur turun di bawah nilai ini dan total koneksi di kumpulan kurang dari maximumPoolSize
, HikariCP akan melakukan upaya terbaik untuk menambahkan koneksi tambahan dengan cepat dan efisien. Namun, untuk kinerja maksimum dan respons terhadap lonjakan permintaan, kami menyarankan untuk tidak menetapkan nilai ini dan sebagai gantinya mengizinkan HikariCP bertindak sebagai kumpulan koneksi berukuran tetap . Default: sama dengan maksimumPoolSize
? maximumPoolSize
Properti ini mengontrol ukuran maksimum yang boleh dicapai oleh kumpulan, termasuk koneksi yang menganggur dan sedang digunakan. Pada dasarnya nilai ini akan menentukan jumlah maksimum koneksi sebenarnya ke backend database. Nilai wajar untuk hal ini paling baik ditentukan oleh lingkungan eksekusi Anda. Ketika kumpulan mencapai ukuran ini, dan tidak ada koneksi menganggur yang tersedia, panggilan ke getConnection() akan diblokir hingga connectionTimeout
milidetik sebelum waktu habis. Silakan baca tentang ukuran kolam renang. Bawaan: 10
? metricRegistry
Properti ini hanya tersedia melalui konfigurasi terprogram atau kontainer IoC. Properti ini memungkinkan Anda menentukan instance MetricRegistry
Codahale/Dropwizard yang akan digunakan oleh kumpulan untuk mencatat berbagai metrik. Lihat halaman wiki Metrik untuk detailnya. Bawaan: tidak ada
? healthCheckRegistry
Properti ini hanya tersedia melalui konfigurasi terprogram atau kontainer IoC. Properti ini memungkinkan Anda menentukan instance Codahale/Dropwizard HealthCheckRegistry
yang akan digunakan oleh kumpulan untuk melaporkan informasi kesehatan terkini. Lihat halaman wiki Pemeriksaan Kesehatan untuk detailnya. Bawaan: tidak ada
? poolName
Properti ini mewakili nama yang ditentukan pengguna untuk kumpulan koneksi dan muncul terutama di konsol logging dan manajemen JMX untuk mengidentifikasi kumpulan dan konfigurasi kumpulan. Default: dibuat secara otomatis
⏳ initializationFailTimeout
Properti ini mengontrol apakah kumpulan akan "gagal dengan cepat" jika kumpulan tidak berhasil diunggulkan dengan koneksi awal. Setiap angka positif dianggap sebagai jumlah milidetik untuk mencoba memperoleh koneksi awal; thread aplikasi akan diblokir selama periode ini. Jika koneksi tidak dapat diperoleh sebelum batas waktu ini terjadi, pengecualian akan diberikan. Batas waktu ini diterapkan setelah periode connectionTimeout
. Jika nilainya nol (0), HikariCP akan berusaha mendapatkan dan memvalidasi koneksi. Jika koneksi diperoleh, tetapi validasi gagal, pengecualian akan dilempar dan kumpulan tidak dimulai. Namun, jika koneksi tidak dapat diperoleh, kumpulan akan dimulai, namun upaya selanjutnya untuk mendapatkan koneksi mungkin gagal. Nilai yang kurang dari nol akan mengabaikan upaya koneksi awal apa pun, dan kumpulan akan segera dimulai saat mencoba mendapatkan koneksi di latar belakang. Akibatnya, upaya selanjutnya untuk mendapatkan koneksi mungkin gagal. Bawaan: 1
❎ isolateInternalQueries
Properti ini menentukan apakah HikariCP mengisolasi kueri kumpulan internal, seperti pengujian koneksi hidup, dalam transaksinya sendiri. Karena ini biasanya merupakan kueri baca-saja, jarang diperlukan untuk merangkumnya dalam transaksinya sendiri. Properti ini hanya berlaku jika autoCommit
dinonaktifkan. Bawaan: salah
❎ allowPoolSuspension
Properti ini mengontrol apakah kumpulan dapat ditangguhkan dan dilanjutkan melalui JMX. Hal ini berguna untuk skenario otomatisasi failover tertentu. Ketika kumpulan ditangguhkan, panggilan ke getConnection()
tidak akan habis waktunya dan akan ditahan hingga kumpulan dilanjutkan. Bawaan: salah
❎ readOnly
Properti ini mengontrol apakah Koneksi yang diperoleh dari kumpulan berada dalam mode baca-saja secara default. Perhatikan bahwa beberapa database tidak mendukung konsep mode baca-saja, sementara yang lain menyediakan optimasi kueri ketika Koneksi diatur ke hanya-baca. Apakah Anda memerlukan properti ini atau tidak akan sangat bergantung pada aplikasi dan database Anda. Bawaan: salah
❎ registerMbeans
Properti ini mengontrol apakah JMX Management Beans ("MBeans") terdaftar atau tidak. Bawaan: salah
? catalog
Properti ini menetapkan katalog default untuk database yang mendukung konsep katalog. Jika properti ini tidak ditentukan, katalog default yang ditentukan oleh driver JDBC akan digunakan. Bawaan: bawaan pengemudi
? connectionInitSql
Properti ini menetapkan pernyataan SQL yang akan dieksekusi setelah setiap pembuatan koneksi baru sebelum menambahkannya ke kumpulan. Jika SQL ini tidak valid atau memunculkan pengecualian, maka akan dianggap sebagai kegagalan koneksi dan logika percobaan ulang standar akan diikuti. Bawaan: tidak ada
? driverClassName
HikariCP akan mencoba menyelesaikan driver melalui DriverManager hanya berdasarkan jdbcUrl
, tetapi untuk beberapa driver lama, driverClassName
juga harus ditentukan. Hilangkan properti ini kecuali Anda mendapatkan pesan kesalahan yang jelas menunjukkan bahwa driver tidak ditemukan. Bawaan: tidak ada
? transactionIsolation
Properti ini mengontrol tingkat isolasi transaksi default dari koneksi yang dikembalikan dari kumpulan. Jika properti ini tidak ditentukan, tingkat isolasi transaksi default yang ditentukan oleh driver JDBC akan digunakan. Hanya gunakan properti ini jika Anda memiliki persyaratan isolasi khusus yang umum untuk semua kueri. Nilai properti ini adalah nama konstan dari kelas Connection
seperti TRANSACTION_READ_COMMITTED
, TRANSACTION_REPEATABLE_READ
, dll. Default: driver default
⏳ validationTimeout
Properti ini mengontrol jumlah waktu maksimum koneksi akan diuji keaktifannya. Nilai ini harus lebih kecil dari connectionTimeout
. Batas waktu validasi terendah yang dapat diterima adalah 250 ms. Bawaan: 5000
⏳ leakDetectionThreshold
Properti ini mengontrol jumlah waktu koneksi dapat keluar dari kumpulan sebelum pesan dicatat yang menunjukkan kemungkinan kebocoran koneksi. Nilai 0 berarti deteksi kebocoran dinonaktifkan. Nilai terendah yang dapat diterima untuk mengaktifkan deteksi kebocoran adalah 2000 (2 detik). Bawaan: 0
➡ dataSource
Properti ini hanya tersedia melalui konfigurasi terprogram atau kontainer IoC. Properti ini memungkinkan Anda menyetel langsung instance DataSource
untuk digabungkan dengan kumpulan, daripada meminta HikariCP membangunnya melalui refleksi. Ini dapat berguna dalam beberapa kerangka injeksi ketergantungan. Jika properti ini ditentukan, properti dataSourceClassName
dan semua properti khusus DataSource akan diabaikan. Bawaan: tidak ada
? schema
Properti ini menetapkan skema default untuk database yang mendukung konsep skema. Jika properti ini tidak ditentukan, skema default yang ditentukan oleh driver JDBC akan digunakan. Bawaan: bawaan pengemudi
➡ threadFactory
Properti ini hanya tersedia melalui konfigurasi terprogram atau kontainer IoC. Properti ini memungkinkan Anda menyetel instance java.util.concurrent.ThreadFactory
yang akan digunakan untuk membuat semua thread yang digunakan oleh kumpulan. Hal ini diperlukan dalam beberapa lingkungan eksekusi terbatas di mana thread hanya dapat dibuat melalui ThreadFactory
yang disediakan oleh kontainer aplikasi. Bawaan: tidak ada
➡ scheduledExecutor
Properti ini hanya tersedia melalui konfigurasi terprogram atau kontainer IoC. Properti ini memungkinkan Anda menyetel instance java.util.concurrent.ScheduledExecutorService
yang akan digunakan untuk berbagai tugas yang dijadwalkan secara internal. Jika memasok HikariCP dengan instance ScheduledThreadPoolExecutor
, disarankan agar setRemoveOnCancelPolicy(true)
digunakan. Bawaan: tidak ada
➡ exceptionOverride
Properti ini hanya tersedia melalui konfigurasi terprogram atau kontainer IoC. Properti ini memungkinkan Anda menyetel turunan kelas, mengimplementasikan antarmuka com.zaxxer.hikari.SQLExceptionOverride
, yang akan dipanggil sebelum koneksi dikeluarkan dari kumpulan karena kondisi pengecualian tertentu. Biasanya, ketika SQLException
dilempar, koneksi dikeluarkan dari kumpulan ketika ada SQLStates atau ErrorCodes tertentu. Metode adjudicate()
akan dipanggil pada instance SQLExceptionOverride
, yang mungkin mengembalikan salah satu dari: Override.CONTINUE_EVICT
. Override.DO_NOT_EVICT
atau Override.MUST_EVICT
. Kecuali dalam kasus yang sangat spesifik Override.CONTINUE_EVICT
harus dikembalikan, sehingga logika evict/no-evict default dapat dijalankan. Bawaan: tidak ada
? exceptionOverrideClassName
Properti ini memungkinkan Anda menentukan nama kelas yang disediakan pengguna yang mengimplementasikan antarmuka com.zaxxer.hikari.SQLExceptionOverride
. Sebuah instance dari kelas akan dipakai oleh kumpulan untuk mengadili pengusiran koneksi. Lihat properti di atas exceptionOverride
untuk penjelasan lengkap. Bawaan: tidak ada
HikariCP memiliki banyak "kenop" untuk diputar seperti yang Anda lihat di atas, tetapi relatif lebih sedikit dibandingkan beberapa kumpulan lainnya. Ini adalah filosofi desain. Estetika desain HikariCP adalah Minimalis. Sesuai dengan filosofi desain yang sederhana lebih baik atau lebih sedikit , beberapa sumbu konfigurasi sengaja ditinggalkan.
Banyak kumpulan koneksi, termasuk Apache DBCP, Vibur, c3p0, dan lainnya menawarkan cache PreparedStatement
. HikariCP tidak. Mengapa?
Pada lapisan kumpulan koneksi PreparedStatements
hanya dapat di-cache per koneksi . Jika aplikasi Anda memiliki 250 kueri yang umum dieksekusi dan kumpulan 20 koneksi, Anda meminta database Anda untuk menyimpan 5.000 rencana eksekusi kueri -- dan kumpulan tersebut juga harus menyimpan sejumlah PreparedStatements
dan grafik objek yang terkait dalam cache.
Sebagian besar driver JDBC database utama sudah memiliki cache Pernyataan yang dapat dikonfigurasi, termasuk PostgreSQL, Oracle, Derby, MySQL, DB2, dan banyak lainnya. Driver JDBC berada dalam posisi unik untuk mengeksploitasi fitur spesifik database, dan hampir semua implementasi caching mampu berbagi rencana eksekusi di seluruh koneksi . Ini berarti bahwa alih-alih 5000 pernyataan di memori dan rencana eksekusi terkait, 250 kueri yang sering dieksekusi menghasilkan tepat 250 rencana eksekusi di database. Implementasi yang cerdas bahkan tidak menyimpan objek PreparedStatement
di memori pada tingkat driver namun hanya melampirkan instance baru ke ID paket yang ada.
Menggunakan cache pernyataan pada lapisan pengumpulan adalah anti-pola, dan akan berdampak negatif terhadap kinerja aplikasi Anda dibandingkan dengan cache yang disediakan driver.
Seperti cache Pernyataan, sebagian besar vendor database besar mendukung pencatatan pernyataan melalui properti driver mereka sendiri. Ini termasuk Oracle, MySQL, Derby, MSSQL, dan lainnya. Beberapa bahkan mendukung pencatatan kueri yang lambat. Untuk beberapa database yang tidak mendukungnya, tersedia beberapa opsi. Kami telah menerima laporan bahwa p6spy berfungsi dengan baik, dan juga mencatat ketersediaan log4jdbc dan jdbcdslog-exp.
Silakan baca Panduan Pemulihan Cepat untuk rincian tentang cara mengkonfigurasi driver dan sistem Anda untuk pemulihan yang tepat dari restart database dan peristiwa partisi jaringan.
Anda dapat menggunakan kelas HikariConfig
seperti 1 :
HikariConfig config = new HikariConfig ();
config . setJdbcUrl ( "jdbc:mysql://localhost:3306/simpsons" );
config . setUsername ( "bart" );
config . setPassword ( "51mp50n" );
config . addDataSourceProperty ( "cachePrepStmts" , "true" );
config . addDataSourceProperty ( "prepStmtCacheSize" , "250" );
config . addDataSourceProperty ( "prepStmtCacheSqlLimit" , "2048" );
HikariDataSource ds = new HikariDataSource ( config );
1 Contoh khusus MySQL, JANGAN SALIN VERBATIM.
atau langsung membuat instance HikariDataSource
seperti:
HikariDataSource ds = new HikariDataSource ();
ds . setJdbcUrl ( "jdbc:mysql://localhost:3306/simpsons" );
ds . setUsername ( "bart" );
ds . setPassword ( "51mp50n" );
...
atau berbasis file properti:
// Examines both filesystem and classpath for .properties file
HikariConfig config = new HikariConfig ( "/some/path/hikari.properties" );
HikariDataSource ds = new HikariDataSource ( config );
Contoh file properti:
dataSourceClassName =org.postgresql.ds.PGSimpleDataSource
dataSource.user =test
dataSource.password =test
dataSource.databaseName =mydb
dataSource.portNumber =5432
dataSource.serverName =localhost
atau berbasis java.util.Properties
:
Properties props = new Properties ();
props . setProperty ( "dataSourceClassName" , "org.postgresql.ds.PGSimpleDataSource" );
props . setProperty ( "dataSource.user" , "test" );
props . setProperty ( "dataSource.password" , "test" );
props . setProperty ( "dataSource.databaseName" , "mydb" );
props . put ( "dataSource.logWriter" , new PrintWriter ( System . out ));
HikariConfig config = new HikariConfig ( props );
HikariDataSource ds = new HikariDataSource ( config );
Ada juga properti System yang tersedia, hikaricp.configurationFile
, yang dapat digunakan untuk menentukan lokasi file properti. Jika Anda ingin menggunakan opsi ini, buat instance HikariConfig
atau HikariDataSource
menggunakan konstruktor default dan file properti akan dimuat.
Kiat Kinerja MySQL
Kami merekomendasikan penggunaan dataSourceClassName
alih-alih jdbcUrl
, namun keduanya dapat diterima. Kami akan mengatakannya lagi, keduanya dapat diterima .
Catatan: Pengguna konfigurasi otomatis Spring Boot, Anda perlu menggunakan konfigurasi berbasis jdbcUrl
.
MySQL DataSource diketahui rusak sehubungan dengan dukungan batas waktu jaringan. Gunakan konfigurasi jdbcUrl
sebagai gantinya.
Berikut adalah daftar kelas JDBC DataSource untuk database populer:
Basis data | Pengemudi | kelas Sumber Data |
---|---|---|
Apache Derby | Derby | org.apache.derby.jdbc.ClientDataSource |
burung api | burung jay | org.firebirdsql.ds.FBSimpleDataSource |
Kunci Google | Kunci pas | com.google.cloud.spanner.jdbc.JdbcDriver |
H2 | H2 | org.h2.jdbcx.JdbcDataSource |
HSQLDB | HSQLDB | org.hsqldb.jdbc.JDBCDataSource |
IBM DB2 | IBM JCC | com.ibm.db2.jcc.DB2SimpleDataSource |
IBM Informix | IBM Informix | com.informix.jdbcx.IfxDataSource |
MSSQL Server | Microsoft | com.microsoft.sqlserver.jdbc.SQLServerDataSource |
Konektor/J | ||
MariaDB | MariaDB | org.mariadb.jdbc.MariaDbDataSource |
Peramal | Peramal | oracle.jdbc.pool.OracleDataSource |
OrientDB | OrientDB | com.orientechnologies.orient.jdbc.OrientDataSource |
PostgreSQL | pgjdbc-ng | com.impossibl.postgres.jdbc.PGDataSource |
PostgreSQL | PostgreSQL | org.postgresql.ds.PGSimpleDataSource |
SAP MaxDB | GETAH | com.sap.dbtech.jdbc.DriverSapDB |
SQLite | xerial | org.sqlite.SQLiteDataSource |
SyBase | jHubungkan | com.sybase.jdbc4.jdbc.SybDataSource |
Catatan Play 2.4 sekarang menggunakan HikariCP secara default. Sebuah plugin baru telah hadir untuk kerangka Play; bermain-hikaricp. Jika Anda menggunakan kerangka kerja Play yang luar biasa, aplikasi Anda layak mendapatkan HikariCP. Terima kasih Tim Edulify!
Pembungkus Clojure baru telah dibuat oleh tomekw dan dapat ditemukan di sini.
Pembungkus JRuby baru telah dibuat oleh tomekw dan dapat ditemukan di sini.
Grup diskusi Google HikariCP di sini, FAQ berkembang.
Jangan lupa Wiki untuk informasi tambahan seperti:
⇒ Java 8+ (artefak Java 6/7 sedang dalam mode pemeliharaan)
⇒ perpustakaan slf4j
Proyek berkinerja tinggi tidak akan pernah memiliki terlalu banyak alat! Kami ingin mengucapkan terima kasih kepada perusahaan-perusahaan berikut:
Terima kasih kepada ej-technologies untuk profiler lengkapnya yang luar biasa, JProfiler.
YourKit mendukung proyek sumber terbuka dengan Java Profiler berfitur lengkap. Klik logo YourKit di bawah untuk mempelajari lebih lanjut.
Silakan lakukan perubahan dan kirimkan permintaan penarikan dari cabang dev
bukan master
. Harap atur editor Anda untuk menggunakan spasi, bukan tab, dan patuhi gaya kode yang sedang Anda edit. Cabang dev
selalu lebih "terkini" daripada master
jika Anda ingin menjalani kehidupan yang lebih baik.