Как указать время ожидания в миллисекундах в вызовах JDBC к базе данных MySQL? - PullRequest
0 голосов
/ 13 июня 2018

При разработке быстрого приложения MySQL Java, как я могу указать время ожидания в миллисекундах при выполнении следующих операций:

  1. при получении соединения из пула соединений
  2. при выполнении запроса

Я не могу найти ответ (1) в документации MySQL по Пул соединений с Connector / J.

Я нашел maxWait атрибут пула соединений в пуле соединений Tomcat, который позволяет указать время ожидания в миллисекундах в качестве атрибута пула.Если операция getConnection занимает больше времени maxWait, возникает исключение тайм-аута.

Является ли использование пула соединений Tomcat единственной опцией для моего первого требования?

ОтносительноВторое требование указания тайм-аута запроса - документ JDBC имеет метод setQueryTimeout для объекта Statement.Но для этого требуется время ожидания в секундах (целочисленное значение).Как выполнить мое требование об указании времени ожидания в миллисекундах?

1 Ответ

0 голосов
/ 13 июня 2018

Если в вашей библиотеке нет встроенной поддержки тайм-аутов, вы всегда можете использовать ExecutorService и Future для эмуляции тайм-аута:

private ExecutorService executor = Executors.newCachedThreadPool();
private DataSource dataSource;

public void doSomething() throws InterruptedException, ExecutionException, TimeoutException, SQLException {
    Connection connection =
            executor.submit(() -> dataSource.getConnection()).get(400, TimeUnit.MILLISECONDS);
    try (Statement stmt = connection.createStatement()) {
        try (ResultSet resultSet = executor.submit(() -> stmt.executeQuery("SELECT * FROM blah"))
                .get(800, TimeUnit.MILLISECONDS)) {
            // Do something with result set
        }
    }
}

Это оставит потоки в пуле потоков работающими(пытаясь выполнить getConnection или запрос), но вы можете ответить в течение установленного времени вашему пользователю / абоненту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...