คำอธิบายโดยละเอียดเกี่ยวกับพูลการเชื่อมต่อฐานข้อมูล Java
หลักการของการรวมการเชื่อมต่อฐานข้อมูลคือ:
แนวคิดพื้นฐานของการรวมการเชื่อมต่อคือการจัดเก็บการเชื่อมต่อฐานข้อมูลเป็นวัตถุในหน่วยความจำเมื่อระบบเริ่มต้น เมื่อผู้ใช้ต้องการเข้าถึงฐานข้อมูลแทนที่จะสร้างการเชื่อมต่อใหม่วัตถุการเชื่อมต่อฟรีที่จัดตั้งขึ้นจะถูกนำออกมาจากกลุ่มการเชื่อมต่อ หลังการใช้งานผู้ใช้จะไม่ปิดการเชื่อมต่อ แต่ทำให้การเชื่อมต่อกลับเข้าสู่พูลการเชื่อมต่อเพื่อเข้าถึงคำขอถัดไป การจัดตั้งและการขาดการเชื่อมต่อของการเชื่อมต่อได้รับการจัดการโดยกลุ่มการเชื่อมต่อเอง ในเวลาเดียวกันคุณยังสามารถควบคุมจำนวนการเชื่อมต่อเริ่มต้นในพูลการเชื่อมต่อขีด จำกัด บนและล่างของการเชื่อมต่อจำนวนเวลาการใช้งานสูงสุดสำหรับการเชื่อมต่อแต่ละครั้งเวลาว่างสูงสุด ฯลฯ โดยการตั้งค่าพารามิเตอร์ของพูลการเชื่อมต่อ นอกจากนี้ยังสามารถตรวจสอบจำนวนการเชื่อมต่อฐานข้อมูลการใช้งาน ฯลฯ ผ่านกลไกการจัดการของตัวเอง
พูลเชื่อมต่อฐานข้อมูลที่ใช้กันทั่วไป:
พูลการเชื่อมต่อฐานข้อมูลที่ใช้กันทั่วไป ได้แก่ JNDI, C3P0, Jakarta และ DBCPBonecp ของ Apache ในหมู่พวกเขาบุคคลที่สามอาศัยกรอบการร้องเพลงใช้ C3P0 และ DBCP; และ Bonecp ได้รับการกล่าวขานว่าเป็นกลุ่มการเชื่อมต่อฐานข้อมูลที่เร็วที่สุด DataSource ที่สร้างโดยวิธี JNDI ใช้ javax.sql.datasource (ไม่มีวิธีอื่นอีกสามวิธี)
ตอนนี้เราจะแนะนำวิธีใช้วิธี JNDI เป็นหลัก วิธีนี้ใช้งานโดยเว็บเซิร์ฟเวอร์ (ตัวอย่างเช่น: Tomcat, WebLogic, WebSphere, Tomcat) เพื่อใช้ java.sql.Datasource เว็บเซิร์ฟเวอร์รับผิดชอบในการเริ่มต้นแหล่งข้อมูลการสร้างการเชื่อมต่อการจัดสรรและการจัดการการเชื่อมต่อ เนื่องจากเป็นฟังก์ชั่นที่ใช้งานโดยเว็บเซิร์ฟเวอร์เองจึงไม่จำเป็นต้องแนะนำแพ็คเกจ JAR พิเศษในโครงการ แต่จำเป็นต้องเพิ่มการกำหนดค่าที่เกี่ยวข้องในไฟล์การกำหนดค่าบางอย่างของเซิร์ฟเวอร์ จากนั้นใช้เซิร์ฟเวอร์ Tomcat (ฐานข้อมูลคือ MySQL) เป็นตัวอย่างเพื่ออธิบายการใช้วิธีนี้
การสร้างฐานข้อมูลและการเริ่มต้น:
สร้างการทดสอบตาราง (รหัสหลัก ID int ชื่อ varchar (10), ราคาลอย) แทรกลงในค่าทดสอบ (1, 'ภาษาอังกฤษ', 22.2); แทรกลงในค่าทดสอบ (2, 'คณิตศาสตร์', 78.9); แทรกลงในค่าทดสอบ (3, 'ประวัติ', 77.9);
1. ใส่ไดรเวอร์ข้อมูล mysql-connector-java-5.0.3-bin.jar ลงใน lib ในไดเรกทอรี tomcat
2. แก้ไขไฟล์ context.xml ภายใต้ Conf ของ Tomcat และเพิ่มการสนับสนุนสำหรับการกำหนดค่าทรัพยากร
<resource auth = "container" driverclassName = "com.mysql.jdbc.driver" maxactive = "100" maxidle = "30" maxwait = "10,000" name = "jdbc/ewsdb" username = "root" admin url = "jdbc: mysql: // localhost: 3306/test1"/>
<คำอธิบายแอตทริบิวต์ทรัพยากร>
1) ชื่อ: ระบุชื่อ JNDI ของทรัพยากร
2) Auth: ระบุผู้จัดการที่จัดการทรัพยากรซึ่งมีสองค่าเสริม: คอนเทนเนอร์และแอปพลิเคชัน คอนเทนเนอร์หมายความว่าคอนเทนเนอร์สร้างและจัดการทรัพยากรและแอปพลิเคชันหมายความว่าเว็บแอปพลิเคชันจะสร้างและจัดการทรัพยากร
3) ประเภท: ระบุชื่อคลาส Java ของทรัพยากร
4) ชื่อผู้ใช้: ระบุชื่อผู้ใช้เพื่อเชื่อมต่อกับฐานข้อมูล
5) รหัสผ่าน: ระบุรหัสผ่านเพื่อเชื่อมต่อกับฐานข้อมูล
6) DriverClassName: ระบุชื่อของคลาสการใช้งานไดรเวอร์ในไดรฟ์ JDBC ที่เชื่อมต่อกับฐานข้อมูล
7) URL: ระบุ URL เพื่อเชื่อมต่อกับฐานข้อมูล 127.0.0.1 เป็น IP ของเซิร์ฟเวอร์ฐานข้อมูลที่จะเชื่อมต่อกับ 3306 เป็นพอร์ตเซิร์ฟเวอร์ฐานข้อมูลและ BookDB เป็นชื่อฐานข้อมูล
8) Maxactive: ระบุจำนวนสูงสุดของการเชื่อมต่อฐานข้อมูลที่ใช้งานอยู่ในพูลการเชื่อมต่อฐานข้อมูล ค่าคือ 0 แสดงว่ามันไม่ได้ จำกัด
9) Maxidle: ระบุจำนวนสูงสุดของการเชื่อมต่อฐานข้อมูลในพูลการเชื่อมต่อฐานข้อมูลที่ไม่ได้ใช้งาน ค่าคือ 0 แสดงว่ามันไม่ได้ จำกัด
10) MaxWait: ระบุเวลาสูงสุด (เป็นมิลลิวินาที) สำหรับพูลการเชื่อมต่อฐานข้อมูลจะไม่ได้ใช้งาน หลังจากเวลานี้ข้อยกเว้นจะถูกโยนลงไป ค่าคือ -1 ซึ่งหมายความว่าคุณสามารถรออย่างไม่มีกำหนด
maxactive = "100"
ระบุจำนวนการเชื่อมต่อสูงสุดที่สามารถรับได้จากกลุ่มการเชื่อมต่อในการเกิดขึ้นพร้อมกัน หากฐานข้อมูลไม่ได้ใช้เพียงอย่างเดียวสำหรับแอปพลิเคชันการตั้งค่าพารามิเตอร์สูงสุดสามารถป้องกันไม่ให้แอปพลิเคชันได้รับการเชื่อมต่อไม่ จำกัด จากแอปพลิเคชันอื่น ๆ หากฐานข้อมูลถูกใช้เพื่อรองรับแอปพลิเคชันเท่านั้นการตั้งค่าสูงสุดในทางทฤษฎีจะถูกตั้งค่าเป็นจำนวนการเชื่อมต่อสูงสุดที่ฐานข้อมูลสามารถรองรับได้ Maxactive เพียงแสดงถึงจำนวนการเชื่อมต่อสูงสุดที่สามารถรับได้พร้อมกันผ่านพูลการเชื่อมต่อ การได้มาและการเปิดตัวของการเชื่อมต่อเป็นสองทาง เมื่อแอปพลิเคชันร้องขอพูลการเชื่อมต่อพร้อมกันพูลการเชื่อมต่อจะต้องได้รับการเชื่อมต่อจากฐานข้อมูล ดังนั้นเมื่อแอปพลิเคชันใช้การเชื่อมต่อและส่งคืนการเชื่อมต่อไปยังพูลการเชื่อมต่อพูลการเชื่อมต่อจะส่งคืนการเชื่อมต่อไปยังฐานข้อมูลในเวลาเดียวกันหรือไม่? เห็นได้ชัดว่าคำตอบคือไม่ หากสิ่งนั้นเกิดขึ้นพูลการเชื่อมต่อจะไม่จำเป็นซึ่งไม่เพียง แต่จะไม่ปรับปรุงประสิทธิภาพ แต่จะลดประสิทธิภาพแทน ดังนั้นจะจัดการกับการเชื่อมต่อหลังจากส่งคืนได้อย่างไร?
maxidle = "30"
หากถึง maxactive = 100 ในระหว่างการเกิดขึ้นพร้อมกันพูลการเชื่อมต่อจะต้องได้รับ 100 การเชื่อมต่อจากฐานข้อมูลเพื่อให้แอปพลิเคชันสำหรับใช้งาน เมื่อแอปพลิเคชันปิดการเชื่อมต่อเนื่องจาก maxidle = 30 การเชื่อมต่อทั้งหมดจะไม่ถูกส่งกลับไปยังฐานข้อมูล 30 การเชื่อมต่อจะถูกเก็บไว้ในพูลการเชื่อมต่อและสถานะไม่ได้ใช้งาน
minidle =” 2”
ขั้นต่ำไม่มีผลตามค่าเริ่มต้น ความหมายของมันคือเมื่อมี minidles น้อยในพูลการเชื่อมต่อเธรดการตรวจสอบระบบจะเริ่มฟังก์ชั่นเสริม โดยทั่วไปเราไม่ได้เริ่มหัวข้อเสริม
คำถาม: วิธีการตั้งค่า maxactive และ maxidle?
ในทางทฤษฎีควรตั้งค่าสูงสุดให้เป็นจำนวนแอปพลิเคชันที่เกิดขึ้นพร้อมกันสูงสุดดังนั้นแม้ในกรณีของการเกิดขึ้นพร้อมกันสูงสุดแอปพลิเคชันยังสามารถรับการเชื่อมต่อจากกลุ่มการเชื่อมต่อ อย่างไรก็ตามความยากลำบากคือมันเป็นเรื่องยากสำหรับเราที่จะประเมินหมายเลขพร้อมกันสูงสุดอย่างถูกต้อง การตั้งค่าเป็นหมายเลขพร้อมกันสูงสุดคือการประกันคุณภาพการบริการที่ดีที่สุด
การเชื่อมต่อที่สอดคล้องกันของ maxidle นั้นมีการเชื่อมต่อที่ยาวนานจริงโดยพูลเชื่อมต่อซึ่งเป็นส่วนที่สระว่ายน้ำเชื่อมต่อมีข้อได้เปรียบ ในทางทฤษฎีการรักษาการเชื่อมต่อที่ยาวนานขึ้นสามารถตอบสนองได้เร็วขึ้นเมื่อใช้คำขอ แต่การรักษาการเชื่อมต่อมากเกินไปจะใช้ทรัพยากรจำนวนมากในฐานข้อมูล ดังนั้นยิ่งแม็กซิเดลยิ่งใหญ่เท่าไหร่ก็ยิ่งดีเท่านั้น ในตัวอย่างเดียวกันข้างต้นเราขอแนะนำให้ตั้งค่า maxidle เป็นตัวเลขใกล้กับ 50 ใน 50-100 เช่น 55 สิ่งนี้ช่วยให้คุณสามารถรักษาการเชื่อมต่อฐานข้อมูลน้อยลงในขณะที่คำนึงถึงการเกิดขึ้นพร้อมกันสูงสุดและในกรณีส่วนใหญ่สามารถให้ความเร็วที่สอดคล้องกันเร็วที่สุด
3. เปิดไฟล์ web.xml ของแอปพลิเคชันและเพิ่มการกำหนดค่าต่อไปนี้
<resource-ref> <sention> การเชื่อมต่อ db </คำอธิบาย> <res-ref-name> jdbc/ewsdb </res-ref-name> <s res-type> javax.sql.datasource </res-type>
<resource-ref> คำอธิบายแอตทริบิวต์:
1) คำอธิบาย: คำอธิบายของทรัพยากรที่อ้างอิง
2) Res-Ref-Name: ระบุชื่อ JNDI ของทรัพยากรที่อ้างอิงซึ่งสอดคล้องกับแอตทริบิวต์ชื่อในองค์ประกอบ <resource>
3) Res-type: ระบุชื่อคลาสของทรัพยากรอ้างอิงซึ่งสอดคล้องกับแอตทริบิวต์ประเภทในองค์ประกอบ <sorese Resource>
4) Res-Auth: ระบุผู้จัดการที่จัดการทรัพยากรที่อ้างอิงซึ่งสอดคล้องกับแอตทริบิวต์การรับรองความถูกต้องในองค์ประกอบ <resource>
4. เขียนรหัส Java และใส่ไว้ในสภาพแวดล้อม Tomcat ดังนี้
สร้างตัวอย่าง jsp: myjsp.jsp
<%@ page language = "java" contentType = "ข้อความ/html; charset = utf-8" pageencoding = "utf-8"%> <! doctype html สาธารณะ "-// w3c // dtd html 4.01 transitional // en" "http://www.w3.org/tr/html4/loose.dtd"><%@ นำเข้าหน้า =" java.io.*"%@@ page import =" java.util.*"%> <%@ page import =" java.sql.* import = "javax.sql.*" %> < %@ page import = "javax.sql.*" %> < %@ page import = "javax.sql.*" %> < %@ page import = "javax.sql.*" %> %> <html> <head> <title> พูลการเชื่อมต่อฐานข้อมูล JNDI ภายใต้ Tomcat </title> </head> <body> < % ลอง {Connection Conn; คำสั่ง stmt; Resultset Rs; บริบท ctx = new InitialContext (); DataSource DS = (DataSource) CTX.Lookup ("Java: comp/env/jdbc/ewsdb"); conn = ds.getConnection (); stmt = conn.createstatement (); // Query Records RS = STMT.ExecuteQuery ("เลือก ID, ชื่อ, ราคาจากการทดสอบ"); // ผลลัพธ์การสืบค้นเอาท์พุทออกมา println ("<table border = 1 width = 400>"); ในขณะที่ (rs.next ()) {string col1 = rs.getString (1); สตริง col2 = rs.getString (2); float col3 = rs.getfloat (3); // พิมพ์ข้อมูลที่แสดงออกมา println ("<tr> <td>"+col1+"</td> <td>"+col2+"</td> <td>"+col3+"</td> </tr>"); // ปิดชุดผลลัพธ์การประกาศ SQL และการเชื่อมต่อฐานข้อมูล rs.close (); stmt.close (); conn.close (); } catch (exception e) {out.println (e.getMessage ()); E.PrintStackTrace (); } %> </body> </html>ป้อน http: // localhost: 8080/test/myjsp.jsp ในเบราว์เซอร์ของคุณเพื่อดูผลลัพธ์
ขอบคุณสำหรับการอ่านฉันหวังว่ามันจะช่วยคุณได้ ขอบคุณสำหรับการสนับสนุนเว็บไซต์นี้!