c3p0

2012-09-20 30 views
31

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

+7

जरूरत यह एक बढ़िया, बहुत उपयोगी सवाल था नकारता। अगर यहां अधिक जवाब दिए तो इससे मुझे बहुत सारे प्रयास बचाएंगे। कुछ भी नहीं, मॉडरेटर के लिए धन्यवाद! –

+0

मैं सहमत हूं। यह एक अच्छा सवाल था ... कुछ मॉडरेटर एक अच्छा सवाल बर्बाद करने के लिए जल्दी। –

उत्तर

2

बेस्ट विन्यास कंटेनर वातावरण का उपयोग करने के डेटा स्रोत प्राप्त करने के लिए सेटअप जेपीए है।

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

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

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

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

+0

आपके उत्तर के लिए धन्यवाद। मैं hibernate3.0, c0p3-0.9.1 और टोमकैट का उपयोग कर रहा हूँ। क्या आपके पास कनेक्शन पूल को कॉन्फ़िगर करने की आपकी रणनीति के लिए कोई नमूना है? 8 घंटे के बाद निष्क्रिय कनेक्शन तोड़ने के लिए MySQL से बचना बहुत महत्वपूर्ण है, अगर आपकी पिछली गतिविधियां इसकी मदद करती हैं, तो इसका स्वागत किया जाएगा। –

+0

भले ही MySQL 8 घंटों के बाद निष्क्रिय कनेक्शन तोड़ता है, c3p0 को हमेशा उपयोग से पहले कनेक्शन का परीक्षण करने के लिए कॉन्फ़िगर किया जा सकता है, साथ ही निष्क्रिय होने पर परीक्षण भी जारी रखा जा सकता है। क्या आपने उस जानकारी के लिए स्टैक ओवरफ्लो खोजा था? http://stackoverflow.com/questions/10526313/zombie-connections-to-mysql-using-c3p0-with-tomcat (कई अन्य संदर्भ हैं, आपको टॉमकैट को सी 3 पी 0 का उपयोग न करने के लिए शुरू करने की आवश्यकता है, फिर सेट अप करने पर जैसे ही आपको अपने युद्ध तैनाती की आवश्यकता है, फिर जेएनडीआई लुकअप का उपयोग करने के लिए अपनी जेपीए परियोजना बदलें)। –

+0

मुझे पता है कि परीक्षण कनेक्शन मदद कर सकता है और मेरे पास c3p0 कॉन्फ़िगरेशन हैं लेकिन मुझे यकीन नहीं है कि ये कॉन्फ़िगरेशन सत्य और काम कर रहे हैं। कृपया मेरे अंतिम प्रश्न पर एक नज़र डालें stackoverflow.com/questions/12446266/c3p0-configurations-where-and-how –

44

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

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

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

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

maxIdleTimeExcessConnections और idleConnectionTestPeriod की

उपयोग के लिए 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> 
+0

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

+0

@Domenic: मुझे एक ही समस्या मिल रही है, नया कनेक्शन बनाने में असमर्थ। यहां मेरे सभी विवरण हैं। मुझे लगता है कि आप मेरे c3p0 में समस्या का पता लगा सकते हैं। http://stackoverflow.com/questions/38994849/unable-to-get-jdbc-connection-even-pool-shows-only-few-connections-are-used –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^