यह सही तरीका नहीं है। डेटा स्रोत को उस किसी भी कंटेनर द्वारा प्रबंधित करने की आवश्यकता है जिसमें आप एप्लिकेशन चला रहे हैं। MysqlConnectionPoolDataSource
है नहीं एक कनेक्शन पूल। यह javax.sql.DataSource
इंटरफेस। आप इसे सामान्य रूप से जेएनडीआई संदर्भ में परिभाषित करते हैं और इसे वहां से प्राप्त करते हैं। साथ ही MySQL स्वयं यह सब स्पष्ट रूप से उनके दस्तावेज़
.
अब, इसका उपयोग कैसे करना है यह आवेदन के उद्देश्य पर निर्भर करता है। यदि यह एक वेब एप्लिकेशन है, तो आपको सर्वलेट कंटेनर/एपसर्वर के जेएनडीआई संसाधन दस्तावेज़ीकरण को संदर्भित करने की आवश्यकता है। यदि यह उदाहरण के लिए टॉमकैट है, तो आप इसे यहां पा सकते हैं। . यदि आप क्लाइंट एप्लिकेशन चला रहे हैं - जिसके लिए मैं कनेक्शन पूल के मूल्य पर अत्यधिक सवाल उठाऊंगा--, तो आपको एक कनेक्शन पूलिंग फ्रेमवर्क की तलाश करनी होगी जो MySQL द्वारा प्रदान किए गए कनेक्शन पूल किए गए डेटासोर्स का उपयोग कर सके, जैसे कि C3P0 ।
आपके द्वारा पोस्ट किए गए कोड के साथ दूसरी समस्या यह है कि PooledConnection#getConnection()
अंतर्निहित . लौटाएगा कनेक्शन जो इस प्रकार नहीं . है एक जमा कनेक्शन। इस पर कॉल करने से पूल से कनेक्शन वापस नहीं आएगा, लेकिन वास्तव में इसे बंद कर दें। पूल को हर बार एक नया कनेक्शन बनाना होता है।
फिर थ्रेडसेफ्टी स्टोरी, जो कि असली . पर निर्भर करती है प्रश्न में कनेक्शन पूलिंग ढांचा। C3P0 ने वर्षों में अपनी मजबूती साबित की है, आप इसके बारे में चिंता न करें जब तक आप मानक मुहावरे के अनुसार JDBC कोड लिखते हैं, यानी केवल का उपयोग करें JDBC इंटरफेस करता है और और . प्राप्त करता है सभी संसाधन बंद करें (Connection
, Statement
और ResultSet
) कम से कम संभव दायरे में।