شرح مفصل لمجموعة اتصال قاعدة بيانات Java
مبدأ تجميع اتصال قاعدة البيانات هو:
تتمثل الفكرة الأساسية لتجميع الاتصال في تخزين اتصال قاعدة البيانات ككائن في الذاكرة عند تهيئة النظام. عندما يحتاج المستخدم إلى الوصول إلى قاعدة البيانات ، بدلاً من إنشاء اتصال جديد ، يتم إخراج كائن اتصال مجاني ثابت من مجموعة الاتصال. بعد الاستخدام ، لا يغلق المستخدم الاتصال ، ولكنه يعيد الاتصال مرة أخرى إلى تجمع الاتصال للوصول إلى الطلب التالي. تتم إدارة إنشاء وقطع الاتصالات من خلال تجمع الاتصال نفسه. في الوقت نفسه ، يمكنك أيضًا التحكم في العدد الأولي للاتصالات في تجمع الاتصال ، والحدود العلوية والسفلية للاتصالات ، والحد الأقصى لعدد أوقات الاستخدام لكل اتصال ، والحد الأقصى لوقت الخمول ، وما إلى ذلك عن طريق تعيين معلمات تجمع الاتصال. يمكنه أيضًا مراقبة عدد اتصالات قاعدة البيانات ، والاستخدام ، وما إلى ذلك من خلال آلية الإدارة الخاصة بها.
تجمعات اتصال قاعدة البيانات شائعة الاستخدام:
تشمل تجمعات اتصال قاعدة البيانات الشائعة الاستخدام JNDI و C3P0 و Apache's Jakarta و DBCPBonECP. من بينها ، تعتمد أطراف ثالثة على إطار الغناء ، استخدم C3P0 و DBCP ؛ ويقال إن Bonecp هو أسرع تجمع اتصالات قاعدة بيانات. تُنشط DataSource الذي تم إنشاؤه بواسطة طريقة JNDI حقًا javax.sql.datasource (لا شيء من الطرق الثلاث الأخرى)
الآن سنقدم بشكل أساسي كيفية استخدام طريقة JNDI. يتم تنفيذ هذه الطريقة بواسطة خادم الويب (على سبيل المثال: Tomcat ، WebLogic ، WebSphere ، Tomcat) لتنفيذ Java.sql.DataSource. خادم الويب مسؤول عن تهيئة مصدر البيانات ، وإنشاء الاتصالات ، وتخصيص الاتصالات وإدارتها. نظرًا لأنها وظيفة يتم تنفيذها بواسطة خادم ويب نفسه ، فليس من الضروري تقديم حزم جرة خاصة في المشروع ، ولكن من الضروري إضافة تكوينات ذات صلة إلى بعض ملفات التكوين للخادم. بعد ذلك ، خذ خادم Tomcat (قاعدة البيانات هي MySQL) كمثال لوصف استخدام هذه الطريقة.
إنشاء قاعدة البيانات والتهيئة:
قم بإنشاء اختبار الجدول (المعرف int الأساسي ، اسم varchar (10) ، تعويم السعر) insert في قيم الاختبار (1 ، 'الإنجليزية' ، 22.2) ؛ insert في قيم الاختبار (2 ، 'Math' ، 78.9) ؛ insert في قيم الاختبار (3 ، 'History' ، 77.9) ؛
1. ضع برنامج تشغيل البيانات mysql-connector-java-5.0.3-bin.jar في lib في دليل tomcat
2. قم بتعديل ملف Context.xml ضمن Conf's Conf وأضف الدعم لتكوين الموارد
<Resource Auth = "Container" driverClassName = "com.mysql.jdbc.driver" maxactive = "100" maxidle = "30" maxwait = "10000" name = "jdbc/ewsdb" url = "jdbc: mysql: // localhost: 3306/test1"/>
<وصف السمة المورد>
1) الاسم: حدد اسم JNDI للمورد.
2) AUTH: يحدد المدير الذي يدير المورد ، الذي له قيمتان اختياريتان: الحاوية والتطبيق. الحاوية تعني أن الحاوية تنشئ المورد وتديرها ، ويعني التطبيق أن تطبيق الويب ينشئ المورد ويديره.
3) النوع: حدد اسم فئة Java للمورد.
4) اسم المستخدم: حدد اسم المستخدم للاتصال بقاعدة البيانات.
5) كلمة المرور: حدد كلمة المرور للاتصال بقاعدة البيانات.
6) DRIVERCLASTNAME: يحدد اسم فئة تنفيذ برنامج التشغيل في محرك JDBC الذي يتصل بقاعدة البيانات.
7) عنوان URL: حدد عنوان URL للاتصال بقاعدة البيانات. 127.0.0.1 هو IP لخادم قاعدة البيانات المراد توصيله ، 3306 هو منفذ خادم قاعدة البيانات ، و BookDB هو اسم قاعدة البيانات.
8) MaxActive: يحدد الحد الأقصى لعدد اتصالات قاعدة البيانات النشطة في مجموعة اتصال قاعدة البيانات. القيمة 0 ، مما يشير إلى أنه غير مقيد.
9) MaxIdle: يحدد الحد الأقصى لعدد اتصالات قاعدة البيانات في مجموعة اتصال قاعدة البيانات التي هي خاملة. القيمة 0 ، مما يشير إلى أنه غير مقيد.
10) MaxWait: يحدد الحد الأقصى للوقت (بالمللي ثانية) لكي يكون تجمع اتصال قاعدة البيانات في وضع الخمول. بعد هذا الوقت ، سيتم طرح استثناء. القيمة -1 ، مما يعني أنه يمكنك الانتظار إلى أجل غير مسمى.
MaxAcive = "100"
يشير إلى الحد الأقصى لعدد الاتصالات التي يمكن الحصول عليها من تجمع الاتصال بالتزامن. إذا لم يتم استخدام قاعدة البيانات بمفردها للتطبيق ، فإن تعيين المعلمة MaxActive يمكن أن يمنع التطبيق من الحصول على اتصالات غير محدودة من التطبيقات الأخرى. إذا تم استخدام قاعدة بيانات فقط لدعم التطبيق ، فيمكن ضبط MaxActive نظريًا على الحد الأقصى لعدد الاتصالات التي يمكن أن تدعمها قاعدة البيانات. يمثل MaxActive ببساطة الحد الأقصى لعدد الاتصالات التي يمكن الحصول عليها بشكل متزامن من خلال تجمع الاتصال. الاستحواذ وإصدار الاتصالات في اتجاهين. عندما يطلب التطبيق بشكل متزامن تجمع الاتصال ، يحتاج تجمع الاتصال إلى الحصول على الاتصال من قاعدة البيانات. لذلك ، عندما يستخدم التطبيق الاتصال ويعيد الاتصال إلى تجمع الاتصال ، هل يعيد تجمع الاتصال أيضًا الاتصال إلى قاعدة البيانات في نفس الوقت؟ من الواضح أن الجواب لا. إذا حدث ذلك ، فسيصبح تجمع الاتصال غير ضروري ، والذي لن يحسن الأداء فحسب ، بل سيقلل بدلاً من ذلك من الأداء. إذن كيف تتعامل مع الاتصال بعد إرجاعه؟
maxidle = "30"
إذا تم الوصول إلى MaxActive = 100 أثناء التزامن ، فيجب أن يحصل مجموعة الاتصال على 100 اتصال من قاعدة البيانات لتوفير التطبيق للاستخدام. عندما يغلق التطبيق الاتصال ، نظرًا لأن MaxIdle = 30 ، فلن يتم إرجاع جميع الاتصالات إلى قاعدة البيانات. سيتم الاحتفاظ بـ 30 اتصالات في تجمع الاتصال ، والحالة خاملة.
minidle = "2"
الحد الأدنى لا يسري بشكل افتراضي. معنىها هو أنه عندما يكون هناك عدد قليل من الوسيط في تجمع الاتصال ، سيبدأ مؤشر ترابط مراقبة النظام الوظيفة التكميلية. بشكل عام ، لا نبدأ الخيط التكميلي.
سؤال: كيفية ضبط MaxActive و Maxidle؟
من الناحية النظرية ، يجب ضبط MaxActive على الحد الأقصى لعدد التزامن من التطبيقات ، بحيث حتى في حالة الحد الأقصى للتزامن ، لا يزال بإمكان التطبيق الحصول على اتصالات من مجموعة الاتصال. ومع ذلك ، فإن الصعوبة هي أنه من الصعب علينا تقدير الحد الأقصى لرقم التزامن بدقة. يعد تعيينه إلى الحد الأقصى لرقم التزامن ضمان جودة الخدمة الأمثل.
الوصلات المقابلة لـ Maxidle هي في الواقع اتصالات طويلة يتم الحفاظ عليها بواسطة تجمع الاتصال ، وهو أيضًا الجزء الذي يلعب فيه تجمع الاتصال مزاياه. من الناحية النظرية ، يمكن أن يستجيب الحفاظ على المزيد من الاتصالات الطويلة بشكل أسرع عند تطبيق الطلبات ، ولكن الحفاظ على الكثير من الاتصالات سيستهلك كمية كبيرة من الموارد في قاعدة البيانات. لذلك ، كلما زاد الحد الأقصى ، كان ذلك أفضل. في المثال نفسه على النحو الوارد أعلاه ، نوصي بإعداد MaxIdle إلى عدد تقرب ما يقرب من 50 في 50-100 ، مثل 55. يتيح لك ذلك الحفاظ على اتصالات قاعدة بيانات أقل مع مراعاة الحد الأقصى للتزامن ، وفي معظم الحالات ، يمكن أن يوفر للتطبيق أسرع سرعة مطابقة.
3. افتح ملف web.xml للتطبيق وأضف التكوين التالي
<Sroff-REF> <Description> اتصال DB </description> <red-ref-name> jdbc/ewsdb </res-ref-name> <red-type> javax.sql.dataSource </s-type> <s-auth> حاوية </res-auth> </rossersion-ref>
<sroff-ref> وصف السمة:
1) الوصف: شرح للموارد المشار إليها.
2) res-ref-name: يحدد اسم JNDI للمورد المشار إليه ، المقابل لسمة الاسم في عنصر <sroffect>.
3) Res-type: يحدد اسم فئة المورد المشار إليه ، المقابل لسمة النوع في عنصر <sroffect>.
4) Res-auth: حدد المدير الذي يدير الموارد المشار إليها ، المقابلة لسممة Auth في عنصر <sroffect>
4. اكتب رمز Java ووضعه في بيئة Tomcat ، على النحو التالي
إنشاء JSP مثال: myjsp.jsp
<٪@ page language = "java" contentType = "text/html ؛ charset = utf-8" pageencoding = "utf-8" ٪> <! page import = "Java.io. import = "javax.sql. بيان STMT ؛ ResultSet RS ؛ السياق ctx = جديد initialContext () ؛ DataSource ds = (datasource) ctx.lookup ("java: comp/env/jdbc/ewsdb") ؛ conn = ds.getConnection () ؛ stmt = conn.createstatement () ؛ // Query Records rs = stmt.executequery ("حدد المعرف ، الاسم ، السعر من الاختبار") ؛ // Quary Query out.println ("<table border = 1 width = 400>") ؛ بينما (rs.next ()) {String col1 = rs.getString (1) ؛ سلسلة col2 = rs.getString (2) ؛ float col3 = rs.getfloat (3) ؛ // قم بطباعة البيانات المعروضة Out.println ("<tr> <td>"+col1+"</td> <td>"+col2+"</td> <td>"+col3+"</td> </tr>") ؛} out.println ("</table>") ؛ // أغلق مجموعة النتائج ، إعلان SQL واتصال قاعدة البيانات Rs.Close () ؛ stmt.close () ؛ conn.close () ؛ } catch (استثناء e) {out.println (e.getMessage ()) ؛ E.PrintStackTrace () ؛ } ٪> </body> </html>أدخل http: // localhost: 8080/test/myjsp.jsp في متصفحك لعرض النتائج
شكرا لك على القراءة ، آمل أن تساعدك. شكرا لك على دعمك لهذا الموقع!