2009-03-20 34 views
30

मैं एक MySQL सर्वर से कनेक्ट करने के लिए जेडीबीसी का उपयोग कर रहा हूं (मुझे लगता है कि कनेक्शन कनेक्शन नहीं है)। कनेक्शन यूआरएल में मेरे पास autoReconnect=trueautoReconnect = true क्यों काम नहीं करता है?

लेकिन मेरा कनेक्शन अभी भी समय समाप्त हो गया है। मैंने conn.isClosed() और इसकी झूठी भी जांच की है। लेकिन जब मैं कनेक्शन का उपयोग करने की कोशिश करता हूं तो मुझे निम्न अपवाद मिलता है।

 
com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: 

** BEGIN NESTED EXCEPTION ** 

java.net.SocketException 
MESSAGE: Software caused connection abort: socket write error 

STACKTRACE: 

java.net.SocketException: Software caused connection abort: socket write error 
... 

मैं जावा 1.6 में आप कनेक्शन की जाँच करने के लिए conn.isValid(0) उपयोग कर सकते हैं पता है, लेकिन मैं जावा 1.5

वहाँ एक रास्ता या तो सुनिश्चित करने के लिए उसका समय नहीं है है का उपयोग कर रहा हूँ? या मुझे जावा 1.6 में अपग्रेड करना होगा?

उत्तर

30

मेरे पास एक ही समस्या थी और यह बिल्कुल परेशान था। यहां MySQL वेबसाइट पर जोर दिया गया है (जोर मेरा)

क्या चालक को पुराने और/या मृत कनेक्शन को फिर से स्थापित करने का प्रयास करना चाहिए? यदि सक्षम किया गया है तो ड्राइवर मौजूदा लेनदेन से संबंधित किसी स्टेल या मृत कनेक्शन पर जारी किए गए प्रश्नों के लिए अपवाद फेंक देगा, लेकिन नए लेनदेन में कनेक्शन पर जारी की गई अगली क्वेरी से पहले पुनः कनेक्ट करने का प्रयास करेगा। इस सुविधा का उपयोग अनुशंसित नहीं है, क्योंकि सत्र सत्र और डेटा स्थिरता से संबंधित दुष्प्रभाव होते हैं जब अनुप्रयोग SQLExceptions को सही तरीके से संभाल नहीं पाते हैं, और केवल तभी उपयोग किया जा सकता है जब आप अपने आवेदन को कॉन्फ़िगर करने में असमर्थ हैं, और ठीक से कनेक्शन कनेक्शन। वैकल्पिक रूप से, 8 घंटे के डिफ़ॉल्ट के बजाय MySQL सर्वर चर "wait_timeout" को कुछ उच्च मान पर सेट करने की जांच करें।

मेरे अनुभव में, यह "अगली क्वेरी पर पुनः कनेक्ट" कार्यक्षमता की तरह प्रतीत नहीं होता है, लेकिन मैं MySQL 4.0 का उपयोग कर रहा था, जो कि इसका कारण हो सकता है।

मैंने एक मिनी-फ्रेमवर्क लिखना समाप्त कर दिया जो अपवादों को पकड़ता है, उस विशिष्ट त्रुटि के लिए जांच करता है, और यदि संभव हो तो क्वेरी को पुनः कनेक्ट करने और पुनः प्रयास करने का प्रयास करता है।

ईटीए: This link थोड़ा और जानकारी प्रदान करता है, और इंगित करता है कि भविष्य में ऑटो रीकनेक्ट शायद ही हटा दिया जाएगा।

+3

ऑटोरकनेक्ट का उपयोग न करने की सलाह क्योंकि भविष्य में इसे हटाया जाएगा 8-10 साल पुराना है। और फिर भी मैं अभी भी MySQL 5.x को मार्गदर्शन प्रदान कर रहा हूं जो कनेक्टर प्रदान करता है जो कनेक्टर/जे ऑटो रीकनेक्ट प्रॉपर्टी को सेट करने का एक विकल्प है ... –

+2

लिंक किए गए दस्तावेज़ से: "कोई 100% सुरक्षित तरीका नहीं है जो एक जेडीबीसी ड्राइवर कर सकता है यदि टीसीपी/आईपी कनेक्शन डेटाबेस 'राज्य' (यहां तक ​​कि _with_ लेनदेन संबंधी अर्थशास्त्र) के भ्रष्टाचार को खतरे में डाल दिए बिना स्वचालित रूप से फिर से कनेक्ट हो जाता है, यही कारण है कि यह सुविधा अंततः हटा दी जाएगी। " –

2

ऑटो रीकनेक्ट अभी भी अपवाद फेंकता है ताकि आप चाहें तो स्थिति के बारे में कुछ करना चुन सकें। यदि आप इसे पकड़ते हैं, तो आपको यह पता होना चाहिए कि कनेक्शन फिर से बाद में है। (यदि आप लेनदेन में हैं तो कुछ और जटिलता है - आपका वर्तमान लेनदेन बहुत अधिक मृत है।)

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