java - C3p0 की सर्वोत्तम विन्यास




hibernate jpa-2.0 (2)

मैं c3p0 विन्यास का सामना करने वाली समस्या से जूझ रहा हूं। मैंने पिछले हफ्ते एक प्रश्न पोस्ट किया- सी 3 पी 0 कॉन्फ़िगरेशन! कहां और कैसे? , लेकिन कोई जवाब प्राप्त नहीं हुआ। किसी भी मदद की सराहना की है।


डेटा कॉन्फ़िगरेशन प्राप्त करने के लिए कंटेनर वातावरण का उपयोग करने के लिए जेपीए सेट करना सर्वोत्तम कॉन्फ़िगरेशन है।

यह कंटेनर को सीधे आपके जेपीए प्रोजेक्ट में कॉन्फ़िगरेशन के बजाय कनेक्शन पूलिंग प्रदान करने की अनुमति देता है।

आप यह संकेत नहीं देते कि आप किस कंटेनर वातावरण के साथ काम कर रहे हैं। मैं हमेशा स्टैंडअलोन अनुप्रयोगों जैसे कि जावा एसई डेस्कटॉप या सर्वर अनुप्रयोगों के साथ c3p0 का उपयोग करता हूं। मैं इसे वसंत ढांचे के साथ भी उपयोग करता हूं।

सर्वलेट (टोमकैट / जेट्टी) या एप्लिकेशन सर्वर (जैसे ग्लैशफिश या जेबॉस एएस) जैसे कंटेनर का उपयोग करते समय ये पहले से ही डेटासोर्स कनेक्शन पूलर कार्यान्वयन प्रदान करते हैं जो आम तौर पर c3p0 नहीं है लेकिन समकक्ष फ़ंक्शन प्रदान करता है।

मैंने कभी भी एक जेपीए प्रोजेक्ट के अंदर कनेक्शन पूलर को कॉन्फ़िगर करने का प्रयास नहीं किया है क्योंकि इसका मतलब यह है कि प्रत्येक वातावरण के लिए उसे अनुकूलित करने के लिए कॉन्फ़िगरेशन को संपादित करना है। यह एक सिरदर्द है, इसलिए यह सबसे अच्छा है कि जेपीए भाग को बूटस्ट्रैप के दौरान उपयोग करने के लिए डेटासोर्स दिया जाए।


यह एक विन्यास है जिसका मैं उपयोग कर रहा हूं जो संसाधनों को न्यूनतम रखता है। निस्संदेह आप संसाधनों का उपयोग करने के लिए अपने आवेदन को तैयार करना चाहते हैं ...

संदर्भ : http://www.mchange.com/projects/c3p0/index.html

  • testConnectionOnCheckin पूल में वापस आने पर कनेक्शन को मान्य करता है। testConnectionOnCheckOut , हालांकि उपयोग से पहले सक्रिय कनेक्शन सुनिश्चित करेगा, करने के लिए बहुत महंगा होगा।
  • idleConnectionTestPeriod एक सीमा निर्धारित करता है कि परीक्षण से पहले कनेक्शन कितना समय तक निष्क्रिय रहेगा। पसंदीदाTestQuery के बिना, डिफ़ॉल्ट डेटाबेसMetaData.getTables DatabaseMetaData.getTables() - जो डेटाबेस अज्ञेयवादी है, और हालांकि अपेक्षाकृत महंगी कॉल, अपेक्षाकृत छोटे डेटाबेस के लिए शायद ठीक है। यदि आप प्रदर्शन के बारे में पागल हैं तो अपने डेटाबेस के लिए विशिष्ट क्वेरी का उपयोग करें (यानी preferredTestQuery="SELECT 1" )
  • maxIdleTimeExcessConnections कनेक्शन को वापस लाएगा गतिविधि में स्पाइक के बाद minPoolSize पर वापस जाएं।

कॉन्फ़िगरेशन के नीचे 3-20 के बीच पूलसाइज सेट करता है। निष्क्रिय रखने के लिए हर 5 मिनट में निष्क्रिय कनेक्शन को दोबारा रेट किया जाता है। idleConnectionTestPeriod वजह से, यह केवल कनेक्शन की न्यूनतम संख्या को जीवित रखेगा। यदि 4-मिनट के निशान पर 3 से अधिक कनेक्शन हैं, तो यह उन कनेक्शनों को मारता है जो संसाधनों को कम से कम वापस लेते हैं।

maxIdleTimeExcessConnections और idleConnectionTestPeriod का उपयोग maxIdleTimeExcessConnections की आवश्यकता को maxIdleTime

<Context docBase="myapp" path="/myapp" reloadable="true">
    <Resource description="My DB Datasource" name="jdbc/mydb"
        auth="Container" factory="org.apache.naming.factory.BeanFactory"
        type="com.mchange.v2.c3p0.ComboPooledDataSource" 
        user="myuser" password="******"
        minPoolSize="3"
        maxPoolSize="20"
        acquireIncrement="1" 
        driverClass="com.mysql.jdbc.Driver" 
        jdbcUrl="jdbc:mysql://localhost:3306/mydb"
        testConnectionOnCheckin="true" 
        idleConnectionTestPeriod="300"
        maxIdleTimeExcessConnections="240"
    />
</Context>




c3p0