fix potential db connexion problem

This commit is contained in:
Marc Baloup 2020-02-02 16:36:43 +01:00
parent 1c632788f1
commit 173762e481

View File

@ -5,7 +5,11 @@ import java.sql.DriverManager;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import fr.pandacube.util.Log;
public class DBConnection { public class DBConnection {
private static final long CONNECTION_CHECK_TIMEOUT = 30000; // in ms
private Connection conn; private Connection conn;
private String url; private String url;
private String login; private String login;
@ -30,6 +34,7 @@ public class DBConnection {
private void checkConnection() throws SQLException { private void checkConnection() throws SQLException {
if (!isConnected()) { if (!isConnected()) {
Log.info("Connection to the database lost. Trying to reconnect...");
close(); close();
connect(); connect();
} }
@ -37,29 +42,30 @@ public class DBConnection {
public boolean isConnected() public boolean isConnected()
{ {
boolean connected = false; try {
if (conn.isClosed())
return false;
try (ResultSet rs = conn.createStatement().executeQuery("SELECT 1;")) // avoid checking the connection everytime we want to do a db request
{ long now = System.currentTimeMillis();
if (rs == null) if (timeOfLastCheck + CONNECTION_CHECK_TIMEOUT > now)
connected = false; return true;
else if (rs.next())
connected = true; timeOfLastCheck = now;
if (conn.isValid(1))
return true;
try (ResultSet rs = conn.createStatement().executeQuery("SELECT 1;")) {
return rs == null ? false : rs.next();
}
} catch (Exception e) { } catch (Exception e) {
connected = false; return false;
} }
return connected;
} }
public Connection getNativeConnection() throws SQLException { public Connection getNativeConnection() throws SQLException {
if (conn.isClosed()) checkConnection();
connect();
long now = System.currentTimeMillis();
if (timeOfLastCheck + 5000 > now) {
timeOfLastCheck = now;
if (!conn.isValid(1))
checkConnection();
}
return conn; return conn;
} }