2012-05-30 1 views
1

Когда я устанавливаю время ожидания входа в источник данных, что он делает? Позволяет ли это вызвать DriverManager.setLoginTimeout() под капотом? Спросите об этом, потому что мне любопытно, действительно ли возможно установить время входа в источник данных для каждого источника данных. Скажите, есть ли у меня разные СУБД, к которым я хочу подключиться, и эти БД имеют различную отзывчивость, поэтому разумно ожидать другого разрешения на время ожидания соединения, верно?DataSource.setLoginTimeout и DriverManager.setLoginTimeout global?

Если да, то есть ли веская причина, что метод DriverManager.setLoginTimeot() является статическим?

ответ

2

Это свойство должно быть за DataSource (хотя, насколько я вижу, в спецификации JDBC явно не упоминается об этом). Реализация некоторых драйверов DataSource даже не использует DriverManager при создании соединений.

Помните, что значение, заданное в DriverManager, должно быть явно использовано драйвером, поскольку сам DriverManager ничего не делает со значением (кроме сохранения его). Например, драйвер PostgreSQL использует только значение DriverManager, если в URL-адрес JDBC не задан явный тайм-аут, свойства «Свойства» или свойства DataSource.

Причина, по которой DriverManager.setLoginTimeout() заключается в том, что вы не контролируете, какой драйвер фактически используется DriverManager (*), поэтому единственный способ управлять им - через DriverManager.

(*), за исключением, конечно, драйверов, добавленных в путь к классам (и в Java 5 или более ранних версиях: вы явно загружены).

+0

спасибо. Я пытаюсь найти правильный синтаксис, чтобы указать свойство loginTimeout на url для соединений оракула и sql-сервера, но не смог. У вас будет указатель? – RAY

+0

Ну, в соответствии с [этой страницей драйвера Oracle] (http://docs.oracle.com/cd/E13222_01/wls/docs81/jdbc_drivers/oracle.html#1066403) драйвер поддерживает 'LoginTimeout' как свойство и то же самое для [Драйвер сервера SQl] (http://msdn.microsoft.com/en-US/library/ms378988%28v=SQL.90%29.aspx). Этот бит взял меня на несколько секунд в Google. –

+0

Спасибо. Думаю, мой вопрос заключается в том, как связать эти пары значений имени с URL-адресом? Эти документы не так понятны. Я просто добавляю свой url с помощью «; LoginTimeout = 10»? Скажем, если мой текущий URL-адрес: «jdbc: oracle: thin: @DB_INSTANCE», я просто изменяю его на «jdbc: oracle: thin: @DB_INSTANCE; LoginTimeout = 10»? Еще раз спасибо. – RAY

Смежные вопросы