Penjelasan terperinci tentang kumpulan koneksi database java
Prinsip pengumpulan koneksi basis data adalah:
Ide dasar pengumpulan koneksi adalah untuk menyimpan koneksi database sebagai objek dalam memori ketika sistem diinisialisasi. Ketika pengguna perlu mengakses database, alih -alih membuat koneksi baru, objek koneksi gratis yang ditetapkan diambil dari kumpulan koneksi. Setelah digunakan, pengguna tidak menutup koneksi, tetapi menempatkan koneksi kembali ke kumpulan koneksi untuk akses ke permintaan berikutnya. Pembentukan dan pemutusan koneksi dikelola oleh kumpulan koneksi itu sendiri. Pada saat yang sama, Anda juga dapat mengontrol jumlah awal koneksi di kumpulan koneksi, batas koneksi atas dan bawah, jumlah maksimum waktu penggunaan untuk setiap koneksi, waktu idle maksimum, dll. Dengan mengatur parameter kumpulan koneksi. Ini juga dapat memantau jumlah koneksi basis data, penggunaan, dll. Melalui mekanisme manajemennya sendiri.
Kolam koneksi database yang biasa digunakan:
Kolam koneksi basis data yang umum digunakan termasuk JNDI, C3P0, Jakarta Apache dan DBCPboneCP. Di antara mereka, pihak ketiga mengandalkan kerangka kerja Sing menggunakan C3P0 dan DBCP; dan Bonecp dikatakan sebagai kumpulan koneksi basis data tercepat. DataSource yang dibuat oleh metode JNDI benar -benar mengimplementasikan javax.sql.datasource (tidak satu pun dari tiga metode lainnya)
Sekarang kami terutama akan memperkenalkan cara menggunakan metode JNDI. Metode ini diimplementasikan oleh server web (misalnya: Tomcat, WebLogic, WebSphere, Tomcat) untuk mengimplementasikan java.sql.datasource. Server web bertanggung jawab untuk menginisialisasi sumber data, membuat koneksi, mengalokasikan dan mengelola koneksi. Karena ini adalah fungsi yang diimplementasikan oleh server web itu sendiri, tidak perlu memperkenalkan paket JAR khusus ke dalam proyek, tetapi perlu untuk menambahkan konfigurasi yang relevan ke beberapa file konfigurasi server. Selanjutnya, ambil server Tomcat (database adalah MySQL) sebagai contoh untuk menggambarkan penggunaan metode ini.
Pembuatan dan Inisialisasi Basis Data:
Buat tes tabel (ID int kunci primer, nama varchar (10), harga float) Masukkan ke dalam nilai uji (1, 'bahasa Inggris', 22.2); masukkan ke dalam nilai uji (2, 'matematika', 78.9); masukkan ke dalam nilai uji (3, 'riwayat', 77.9);
1. Masukkan driver data mysql-connector-java-5.0.3-bin.jar ke dalam lib di direktori tomcat
2. Ubah file konteks.xml di bawah tomcat's conf dan tambahkan dukungan untuk konfigurasi sumber daya
<Resource Auth = "Container" DriverClassName = "com.mysql.jdbc.driver" maxactive = "100" maxidle = "30" maxwait = "10000" name = "jdbc/ewsdb" username = "root" kata sandi = "admin" type = "javax.sql.daatasorce =" root "kata sandi =" admin "type =" javax.sql.daatacerce " url = "jdbc: mysql: // localhost: 3306/test1"/>
<Deskripsi Atribut Sumber Daya>
1) Nama: Tentukan nama JNDI dari sumber daya.
2) AUTH: Menentukan manajer yang mengelola sumber daya, yang memiliki dua nilai opsional: wadah dan aplikasi. Wadah berarti bahwa wadah membuat dan mengelola sumber daya, dan aplikasi berarti bahwa aplikasi web membuat dan mengelola sumber daya.
3) Jenis: Tentukan nama kelas Java dari sumber daya.
4) Nama pengguna: Tentukan nama pengguna untuk terhubung ke database.
5) Kata sandi: Tentukan kata sandi untuk terhubung ke database.
6) DriverClassName: Menentukan nama kelas implementasi driver di drive JDBC yang menghubungkan ke database.
7) URL: Tentukan URL untuk terhubung ke database. 127.0.0.1 adalah IP dari server database yang akan terhubung, 3306 adalah port server database, dan bookdb adalah nama database.
8) MaxActive: Menentukan jumlah maksimum koneksi database aktif dalam kumpulan koneksi database. Nilainya 0, menunjukkan bahwa itu tidak dibatasi.
9) MAXIDLE: Menentukan jumlah maksimum koneksi basis data dalam kumpulan koneksi database yang menganggur. Nilainya 0, menunjukkan bahwa itu tidak dibatasi.
10) MAXWAIT: Menentukan waktu maksimum (dalam milidetik) untuk kumpulan koneksi basis data menjadi idle. Setelah waktu ini, pengecualian akan dilemparkan. Nilainya adalah -1, yang berarti Anda bisa menunggu tanpa batas waktu.
MaxActive = "100"
Menunjukkan jumlah maksimum koneksi yang dapat diperoleh dari kumpulan koneksi dalam konkurensi. Jika database tidak digunakan sendiri untuk suatu aplikasi, mengatur parameter maksimal dapat mencegah aplikasi untuk mendapatkan koneksi tak terbatas dari aplikasi lain. Jika database hanya digunakan untuk mendukung aplikasi, maksimal dapat secara teoritis diatur ke jumlah maksimum koneksi yang dapat didukung oleh database. Maxactive hanya mewakili jumlah maksimum koneksi yang dapat diperoleh secara bersamaan melalui kumpulan koneksi. Akuisisi dan rilis koneksi adalah dua arah. Ketika aplikasi secara bersamaan meminta kumpulan koneksi, kumpulan koneksi perlu mendapatkan koneksi dari database. Jadi, ketika aplikasi menggunakan koneksi dan mengembalikan koneksi ke kumpulan koneksi, apakah kumpulan koneksi juga mengembalikan koneksi ke database secara bersamaan? Jelas jawabannya adalah tidak. Jika itu terjadi, kumpulan koneksi akan menjadi tidak perlu, yang tidak hanya tidak akan meningkatkan kinerja, tetapi sebaliknya akan mengurangi kinerja. Jadi bagaimana cara menangani koneksi setelah dikembalikan?
maxidle = "30"
Jika MaxActive = 100 tercapai selama konkurensi, kumpulan koneksi harus mendapatkan 100 koneksi dari database untuk menyediakan aplikasi untuk digunakan. Ketika aplikasi menutup koneksi, karena maxidle = 30, tidak semua koneksi akan dikembalikan ke database. 30 Koneksi akan disimpan di kumpulan koneksi, dan statusnya menganggur.
minidle = "2"
Minimum tidak berlaku secara default. Artinya adalah bahwa ketika ada beberapa minidles di kumpulan koneksi, utas pemantauan sistem akan memulai fungsi tambahan. Secara umum, kami tidak memulai utas tambahan.
Pertanyaan: Bagaimana cara mengatur MaxActive dan Maxidle?
Secara teori, maksimal harus diatur ke jumlah konkurensi maksimum aplikasi, sehingga bahkan dalam kasus konkurensi maksimum, aplikasi masih dapat memperoleh koneksi dari kumpulan koneksi. Namun, kesulitannya adalah sulit bagi kita untuk secara akurat memperkirakan angka konkurensi maksimum. Menetapkannya ke nomor konkurensi maksimum adalah jaminan kualitas layanan yang optimal.
Koneksi Maxidle yang sesuai sebenarnya adalah koneksi panjang yang dikelola oleh kumpulan koneksi, yang juga merupakan bagian di mana kumpulan koneksi memainkan keuntungannya. Secara teori, mempertahankan lebih banyak koneksi yang lebih panjang dapat merespons lebih cepat saat menerapkan permintaan, tetapi mempertahankan terlalu banyak koneksi akan mengkonsumsi sejumlah besar sumber daya dalam database. Oleh karena itu, semakin besar maxidle, semakin baik. Dalam contoh yang sama seperti di atas, kami merekomendasikan pengaturan MaxIdle ke angka mendekati 50 di 50-100, seperti 55. Ini memungkinkan Anda untuk mempertahankan lebih sedikit koneksi basis data sambil dengan mempertimbangkan konkurensi maksimum, dan dalam kebanyakan kasus, dapat memberikan aplikasi dengan kecepatan yang tercepat.
3. Buka file web.xml aplikasi dan tambahkan konfigurasi berikut
<Serayat-REF> <CREESTRIPTION> Koneksi DB </cripence> <R res-ref-name> jdbc/ewsdb </ res-ref-name> <rese-type> javax.sql.datasource </RES-TYPE> <RES-AUTH> wadah </res-auth> </resource-ref>
<seragaraan-Ref> Deskripsi Atribut:
1) Deskripsi: Penjelasan sumber daya yang direferensikan.
2) RE-REF-NAME: Menentukan nama JNDI dari sumber daya yang direferensikan, sesuai dengan atribut nama dalam elemen <s Resource>.
3) Res-Type: Menentukan nama kelas dari sumber daya yang direferensikan, sesuai dengan atribut Type di elemen <ser Resource>.
4) Res-auth: Tentukan manajer yang mengelola sumber daya yang direferensikan, sesuai dengan atribut auth dalam elemen <ser Resource>
4. Tulis kode java dan letakkan di lingkungan tomcat, sebagai berikut
Buat contoh JSP: myjsp.jsp
<%@ page language = "java" contentType = "text/html; charset = utf-8" pageEncoding = "utf-8"%> <! Doctype html public "-// w3c // dtd html 4.01 transisi // en" "http://www.w3.org/org/ap/enc" impor = "java.io.*" %> < %@ page impor = "java.util.*" %> < %@ page impor = "java.sql.*" %> < %@ page impor = "java.sql.*" %> < %@ page Impor = "javax.sql.*" %> < %@ page = "page =" javax.sql.*" %> < %@ page =" page = "pagex. import="javax.sql.*" %><%@ page import="javax.sql.*" %><%@ page import="javax.sql.*" %><%@ page import="javax.naming.*" %><html><head><title>JNDI database connection pool under Tomcat</title></head><body> <% try{ Connection conn; Pernyataan stmt; Hasil RS; Konteks ctx = initialcontext baru (); DataSource ds = (DataSource) ctx.lookup ("java: comp/env/jdbc/ewsdb"); conn = ds.getConnection (); stmt = conn.createStatement (); // Catatan Kueri RS = STMT.ExecuteQuery ("Pilih ID, Nama, Harga dari Tes"); // hasil output out.println ("<tabel border = 1 lebar = 400>"); while (rs.next ()) {string col1 = rs.getString (1); String col2 = rs.getString (2); float col3 = rs.getFloat (3); // Cetak data yang ditampilkan out.println ("<tr> <td>"+col1+"</td> <td>"+col2+"</td> <td>"+col3+"</td> </tr>");} out.println ("</table>"); // Tutup set hasil, deklarasi SQL dan koneksi database rs.close (); stmt.close (); conn.close (); } catch (Exception e) {out.println (e.getMessage ()); e.printstacktrace (); } %> </body> </html>Masukkan http: // localhost: 8080/test/myjsp.jsp di browser Anda untuk melihat hasilnya
Terima kasih telah membaca, saya harap ini dapat membantu Anda. Terima kasih atas dukungan Anda untuk situs ini!