Xin chào tất cả Tôi có một ứng dụng Storm cơ bản được thiết lập nơi nó nhận được một luồng tweet và lưu trữ chúng trong cơ sở dữ liệu MySQL. Ứng dụng hoạt động tốt trong ~ 23 giờ đầu tiên hoặc lâu hơn sau đó nó bắt đầu đưa ra lỗi sau:Storm Crashing sau 23 giờ
SQL Exception
SQL State: 08003
Sau khi thực hiện thao tác này một vài lần nó sẽ chết. Tôi đang sử dụng kết nối JBDC tiêu chuẩn để kết nối với cơ sở dữ liệu từ Java. Các mã cho các chức năng để lưu trữ và thiết lập kết nối DB như sau:
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();
}
}
}
Sau khi nó trở nên rõ ràng rằng nó đã đâm do lỗi 08.003 Tôi quyết định rằng nếu nó ném lỗi rằng nó nên thử lại các thiết lập kết nối, tuy nhiên điều đó cũng không giúp được gì. Bất cứ ai có thể chỉ cho tôi đi đúng hướng để giải quyết vấn đề này?
[08003 \t Kết nối không tồn tại] (http://dev.mysql.com/doc/refman/5.0/vi/connector-odbc-reference-errorcodes.html) –
Kết nối có luôn luôn ngắt cùng một lúc trong ngày không? Nếu vậy, có lẽ kết nối bị hỏng bởi một số sự kiện được lên lịch (ví dụ: DB được khởi động lại hàng ngày). –
Có, tôi biết điều này. Đó là lý do tại sao tôi đã thiết lập lại kết nối trong trường hợp nó chạy vào lỗi này. Như được hiển thị ở trên 'catch (SQLException ex) { // xử lý bất kỳ lỗi nào System.out.println (" SQLException: "+ ex.getMessage()); System.out.println ("SQLState:" + ex.getSQLState()); System.out.println ("VendorError:" + ex.getErrorCode()); nếu (ex.getSQLState(). Bằng ("08003")) { setupConnection(); } } ' –