我的 MySQL 服务器引擎正在使用动态 TCP 端口,例如 52358。如果我在 JDBC DB url 连接字符串中指定端口号 52358,则可以毫无问题地进行 JDBC 查询。
jdbc:sqlserver://serverName:52358;databaseName=myDB
然而,由于这是动态端口,如果下次重新启动 SQL Server 后该端口(52358)不可用,则 SQL Server 可能会选择另一个端口。
那么,在连接字符串中配置我的 DB URL 的最佳方法是什么?
我尝试的方法:
省略端口号,只使用实例名称,即:
jdbc:sqlserver://serverName;databaseName=myDB
这个不起作用。顺便说一下,SQL Server浏览器服务已经启用。
找到解决方案(感谢Gord Thompson)。DB URL的完整格式是:完整形式。
jdbc:sqlserver://[serverName[\instanceName][:portNumber]][;property=value[;property=value]]
无论是使用portNumber还是instanceName连接到serverName都是可行的。但是,
如果同时使用portNumber和instanceName,则portNumber将优先,并且instanceName将被忽略。
因此,对于动态端口的情况,我们应该仅使用instanceName进行连接,并保持SQL Browser服务运行(SQL Server提供SQL Server Browser Service来监视端口,并将传入的连接直接定向到该实例的当前端口)。因此,在我的情况下,正确的形式是:
jdbc:sqlserver://serverName\instanceName;databaseName=myDB
此外,我们应该记住:
为了获得最佳的连接性能,在连接到命名实例时应设置端口号。这将避免向服务器发送请求以确定端口号。
因此,这将需要一个静态端口号。