Невозможно получить соединение из пула при сбое сети с использованием dbcp2 - PullRequest
0 голосов
/ 18 июня 2020

Я использую 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 отключен, просто подождите и подождите.

...