Mi motor de SQL Server está utilizando el puerto TCP dinámico, por ejemplo, 52358. puedo hacer consulta JDBC sin ningún problema si se especifica el número de puerto 52358 en mi cadena de conexión JDBC URL DB, es decir,
jdbc:sqlserver://serverName:52358;databaseName=myDB
Sin embargo, ya que este es el puerto dinámico, SQL Server podría elegir otro puerto si este puerto (52358) deja de estar disponible después de reiniciar el servidor SQL próxima vez.
Entonces, ¿qué mejor manera de configurar la URL de mi base de datos en la cadena de conexión?
Enfoque que he intentado :
Omitiendo el número de puerto y usando solamente el nombre de la instancia, es decir,
jdbc:sqlserver://serverName;databaseName=myDB
Esto no funciona. Por cierto, el servicio SQL Server Browser ya está habilitado.
Solución encontrada (gracias a Gord Thompson). La forma completa de la base de datos de URL es:
jdbc:sqlserver://[serverName[\instanceName][:portNumber]][;property=value[;property=value]]
donde ya sea el portNumber o instanceName pueden usarse para conectarse a serverName. Sin embargo,
Si se utilizan tanto un portNumber y instanceName, la portNumber tendrá prioridad y el instanceName será ignorado.
Por lo tanto, para el caso de puertos dinámicos, debemos utilizar sólo instanceName para la conexión y mantener el servicio Explorador de SQL en ejecución (SQL Server proporciona el Explorador de SQL Server Service , de monitorear los puertos y las conexiones entrantes directas al puerto actual para esa instancia) . Por lo tanto, en mi caso, la forma correcta es:
jdbc:sqlserver://serverName\instanceName;databaseName=myDB
Además, debemos tener en cuenta que
Para obtener un rendimiento óptimo de la conexión, se debe configurar el portNumber cuando se conecta a una instancia con nombre. Esto evitará un viaje de vuelta al servidor para determinar el número de puerto
Entonces esto va a llamar a un número de puerto estático.
Si realmente no puede contar con la constante número de puerto que queda entonces tendrá que conectarse utilizando el nombre de la instancia de SQL Server.
instancia predeterminada:
jdbc:sqlserver://servername\MSSQLSERVER;...
instancia con nombre
jdbc:sqlserver://servername\instancename;...
Por supuesto, esto significa que el servicio Explorador de SQL deben ejecutar en el servidor para el nombre de instancia se puede resolver con el número de puerto real que se utiliza actualmente.