Если в вашей библиотеке нет встроенной поддержки тайм-аутов, вы всегда можете использовать 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
или запрос), но вы можете ответить в течение установленного времени вашему пользователю / абоненту.