Можно ли заставить DriverManager.setLoginTimeout (значение int) принимать время ожидания в миллисекундах? - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь написать код Java, который создает соединение Oracle JDBC с базой данных, используя код следующего типа:

DriverManager.registerDriver(new oracle.jdbc.OracleDriver()); 
con = DriverManager.getConnection(url, user, pass);

Теперь я хочу закрыть или разорвать это соединение, если оно занимает больше200millisecs.Я обнаружил, что у них есть метод для этого, который setLoginTimeout(int seconds), который занимает время в секундах, возможно ли setLoginTimeout в миллисекундах?Если нет, есть ли другой способ сделать это?

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

DriverManager.setLoginTimeout указывает глобальное значение по умолчанию для всех драйверов JDBC в приложении.Невозможно установить его в миллисекундах, поскольку DriverManager.setLoginTimeout(int seconds) определено как

Устанавливает максимальное время в секундах, в течение которого драйвер будет ожидать при попытке подключения к базе данных.после идентификации драйвера.

Параметры:
seconds - ограничение времени входа в систему в секундах;ноль означает, что нет предела

Вместо этого вам нужно будет использовать специфическое для драйвера свойство конфигурации (если доступно).

Я не уверен, есть ли у Oracle это, потому что oracle.net.CONNECT_TIMEOUT как подсказывает Кароль - насколько я знаю - также определяется в секундах (на основе TCP.CONNECT_TIMEOUT в документации sqlnet.ora )

0 голосов
/ 20 декабря 2018

Поскольку вы используете драйвер Oracle OJDBC, существуют свойства для управления таймаутами в миллисекундах.Согласно OracleConnection javadoc существует:

  • CONNECTION_PROPERTY_THIN_NET_CONNECT_TIMEOUT - время ожидания входа в мс
  • CONNECTION_PROPERTY_THIN_READ_TIMEOUT - общее время ожидания чтения в мс

Вы можете настроить их при получении нового соединения с помощью DriverManager.getConnection(url, props):

Properties props = new Properties();
props.setProperty("user", user);
props.setProperty("password", pass);
props.setProperty(OracleConnection.CONNECTION_PROPERTY_THIN_NET_CONNECT_TIMEOUT, "200");
props.setProperty(OracleConnection.CONNECTION_PROPERTY_THIN_READ_TIMEOUT, "200");
DriverManager.getConnection(url, props);
...