हैलो सब मेरे पास एक बुनियादी तूफान एप्लिकेशन स्थापित है जहां इसे ट्वीट्स की स्ट्रीम प्राप्त होती है और उन्हें एक MySQL डेटाबेस में संग्रहीत करता है। एप्लिकेशन पहले ~ 23 घंटों के लिए बहुत अच्छा काम करता है या फिर यह निम्न त्रुटि दे रहा है:23 घंटे के बाद तूफान क्रैशिंग
SQL Exception
SQL State: 08003
यह कुछ बार मर जाता है। मैं जावा से डेटाबेस से कनेक्ट करने के लिए मानक जेबीडीसी कनेक्टर का उपयोग कर रहा हूं।
private String _db="";
private Connection conn = null;
private PreparedStatement pst = null;
public ArchiveBolt(String db){
_db = db;
}
private void setupConnection() {
//Connect to the database
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:8889/twitter_recording", "root", "root");
} catch (Exception e){
e.printStackTrace();
}
}
public void execute(Tuple tuple, BasicOutputCollector collector) {
Status s = (Status) tuple.getValue(0);
//setup the connection on the first run through or if the connection got closed down
try {
setupConnection();
} catch (Exception e) {
// TODO: handle exception
System.out.println(e.toString());
}
try {
pst = conn.prepareStatement("INSERT INTO " + _db + " (tweet)" +
"VALUES (?);");
pst.setString(1, s.toString());
//execute the SQL
pst.executeUpdate();
} catch (SQLException ex) {
// handle any errors
System.out.println("SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
if(ex.getSQLState().equals("08003")){
setupConnection();
}
} finally {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
के बाद यह स्पष्ट हो गया कि यह एक 08003 त्रुटि मैंने तय कर लिया है कि यदि यह त्रुटि फेंक दिया यह सेट पुन: प्रयास करना चाहिए की वजह से दुर्घटनाग्रस्त हो गया: इस प्रकार भंडारण और डीबी संबंध स्थापित करने के लिए कार्यों के लिए कोड हैं कनेक्शन के ऊपर, हालांकि यह मदद नहीं की थी। क्या कोई मुझे इस मुद्दे को हल करने के लिए सही दिशा में इंगित कर सकता है?
[08003 \t कनेक्शन मौजूद नहीं है] (http://dev.mysql.com/doc/refman/5।0/en/connector-odbc-context-errorcodes.html) –
क्या कनेक्शन हमेशा दिन के एक ही समय में टूट जाता है? यदि ऐसा है, तो शायद कुछ निर्धारित कार्यक्रम द्वारा कनेक्शन टूट गया है (उदा। डीबी दैनिक रिबूट हो जाता है)। –
हाँ मुझे यह पता है। यही कारण है कि इस मामले में फिर से कनेक्शन सेटअप था कि यह इस त्रुटि में चलाता है। जैसा कि ऊपर दिखाया गया है (एसक्यूलेक्सप्शन पूर्व) { // किसी भी त्रुटि को System.out.println ("SQLException:" + ex.getMessage()) को संभाल लें; System.out.println ("SQLState:" + ex.getSQLState()); System.out.println ("विक्रेता त्रुटि:" + ex.getErrorCode()); अगर (ex.getSQLState() बराबर ("08003")) { सेटअप कनेक्शन(); } } ' –