Соединение JDBC с сервером SQL с динамическими портами TCP - PullRequest
0 голосов
/ 19 октября 2018

Мой сервер SQL Server использует динамический порт TCP, например, 52358. Я могу выполнить запрос JDBC без каких-либо проблем, если я указал номер порта 52358 в строке подключения URL JDBC DB, то есть

jdbc:sqlserver://serverName:52358;databaseName=myDB

Однако, поскольку это динамический порт, сервер SQL может выбрать другой порт, если этот порт (52358) станет недоступным после следующей перезагрузки сервера SQL.

Так, как лучше всего настроить URL моей БД в строке подключения?


Подход, который я пробовал :

Пропуск номера порта и использование только имени экземпляра, т. Е.

jdbc:sqlserver://serverName;databaseName=myDB

Это нене работаетКстати, служба браузера sql server уже включена.


Решение найдено (спасибо Горду Томпсону). полная форма URL-адреса БД:

jdbc:sqlserver://[serverName[\instanceName][:portNumber]][;property=value[;property=value]]

, где portNumber или instanceName могут использоваться для подключения к serverName.Однако,

Если используются и portNumber, и instanceName, то portNumber будет иметь приоритет, а instanceName будет игнорироваться.

Следовательно, для случая динамического порта:мы должны использовать только instanceName для соединения и поддерживать работоспособность службы обозревателя SQL (SQL Server предоставляет службу обозревателя SQL Server для мониторинга портов и направления входящих подключений к текущему порту для этого экземпляра).Таким образом, в моем случае, правильная форма :

jdbc:sqlserver://serverName\instanceName;databaseName=myDB

Кроме того, мы должны помнить, что

Для оптимальной производительности соединения, вы должныустановите номер порта при подключении к именованному экземпляру.Это позволит избежать обратной передачи на сервер для определения номера порта

Тогда для этого потребуется статический номер порта.

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Если вы действительно не можете рассчитывать на то, что номер порта остается постоянным, вам придется подключиться, используя имя экземпляра SQL Server.

Экземпляр по умолчанию:

jdbc:sqlserver://servername\MSSQLSERVER;...

Именованный экземпляр

jdbc:sqlserver://servername\instancename;...

Конечно, это означает, что служба SQL Browser должна быть запущена на сервере, чтобы имя экземпляра могло быть преобразовано в фактический номер порта, который используется в настоящее время.

0 голосов
/ 19 октября 2018

Если вы видите Официальные документы здесь , они сказали, что порт является необязательным (они рекомендуют вам указать один), но смотрите это примечание:

Для оптимальной производительности соединения, вы должны установить номер порта при подключении к именованному экземпляру.Это позволит избежать обратной передачи на сервер для определения номера порта.Если используются и portNumber, и instanceName, portNumber будет иметь приоритет, а instanceName будет игнорироваться.

Я могу понять, что здесь, если вы опустите порт, драйвер сделает некоторое сканирование, чтобы определить, какой порт использовать, попробуйте без ввода порта.Но помните, они рекомендуют для лучшей производительности явно выбирать один.

...