Я использую dbcp2 для объединения в пул. Я многократно выполняю запрос каждые 10 секунд и получаю соединение из пула для этого запроса. Он работал нормально, пока существовал действующий сетевой маршрут к ядру базы данных. Я использую удаленную базу данных, подключенную через VPN. Проблема в том, что когда я отключаю VPN во время работы программы, при следующем выполнении запроса она зависает при установлении соединения и никогда не генерирует исключение. Если я повторно подключусь к VPN, он все равно зависнет.
Ниже приведен мой служебный класс базы данных,
import org.apache.commons.dbcp2.BasicDataSource;
public class DatabaseUtility
{
private static BasicDataSource dataSource;
public static BasicDataSource getDataSource(String url,String username,String password) {
if (dataSource == null) {
BasicDataSource ds = new BasicDataSource();
ds.setUrl(url);
ds.setUsername(username);
ds.setPassword(password);
ds.setValidationQuery("select 1");
ds.setTestOnBorrow(true);
ds.setMaxTotal(50);
ds.setMinIdle(5);
ds.setMaxIdle(10);
ds.setMaxOpenPreparedStatements(1000);
dataSource = ds;
}
return dataSource;
}
}
, и я запускаю метод ниже каждые 10 секунд
public void executeQuery() {
BasicDataSource dataSource = DatabaseUtility.getDataSource(url, username, password)
String query = "SELECT * from someTable"
try (Connection connection = dataSource.getConnection()) {
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(query);
statement.close();
resultSet.close();
} catch (Exception e) {
System.out.println(e);
}
}
Это не будет генерировать никаких исключений, когда VPN отключен, просто подождите и подождите.