播放框架java连接对sql server数据库不可用

Posted

技术标签:

【中文标题】播放框架java连接对sql server数据库不可用【英文标题】:Play framework java connection is not available to sql server database 【发布时间】:2022-01-03 04:05:16 【问题描述】:

在从我的 java 项目(play framework)连接到 Azure 中的 sql server 数据库时遇到问题。

在本地环境中,连接工作正常。

我的 application.conf 中的以下参数:

db.default 
     url="jdbc:sqlserver://server-name.database.windows.net:1433;database=database-name"
     encrypt=true
     trustServerCertificate=false
     hostNameInCertificate="*.database.windows.net"
     loginTimeout=30
     driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
     username="root"
     password="RootPwd"

这是收到的错误:

错误 o.h.e.jdbc.spi.SqlExceptionHelper HikariPool-1 - 连接是 不可用,请求在 30006 毫秒后超时。错误 o.h.e.jdbc.spi.SqlExceptionHelper 到主机的 TCP/IP 连接 par-sql-server.database.windows.net,端口 1433 失败。错误: “par-sql-server.database.windows.net。验证连接 特性。确保 SQL Server 实例正在运行 主机并在端口接受 TCP/IP 连接。确保 TCP 到端口的连接不会被防火墙阻止。”。错误 p.api.http.DefaultHttpErrorHandler

play.api.PlayException: 执行异常[[CompletionException: org.hibernate.exception.JDBCConnectionException:无法获取 JDBC连接]] 在 play.api.http.HttpErrorHandlerExceptions$.$anonfun$convertToPlayException$3(HttpErrorHandler.scala:388) 在 scala.Option.getOrElse(Option.scala:201) 在 play.api.http.HttpErrorHandlerExceptions$.convertToPlayException(HttpErrorHandler.scala:388) 在 play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:373) 在 play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:264) 在 play.core.server.AkkaHttp

我已经检查过 tcp/ip 端口 1433 是否可以正确用于数据库,并且我的 ip 设置正确以避免防火墙。

有什么建议吗? 谢谢

【问题讨论】:

听起来仍然存在防火墙问题 - 如果不是在 Azure 中,那么可能在您的本地网络上。在 PowerShell 中尝试 Test-NetConnection -ComputerName server-name.database.windows.net -Port 1433。如果它无法获得连接,那么您的 Java 进程也将无法连接到它。 【参考方案1】:

通常当数据库未在默认的 connectionTimeout 属性内获取连接时会发生此错误。

您可以尝试在Java config中增加connectionTimeout的值,如下所示:

config.setConnectionTimeout(300000);

以下是示例配置之一:

HikariConfig config = new HikariConfig();
        config.setMaximumPoolSize(20);
        config.setConnectionTimeout(300000);
        config.setConnectionTimeout(120000);
        config.setLeakDetectionThreshold(300000);

如果可能的话,让我知道重现此问题的步骤,以便我可以相应地修复它,同时根据您提供的这些博客(Blog1、Blog2)的信息将帮助您建立连接

【讨论】:

以上是关于播放框架java连接对sql server数据库不可用的主要内容,如果未能解决你的问题,请参考以下文章

ssm框架下 数据库连接异常 java.sql.SQLException: The server time zone value '???ú±&

播放框架 2.0.2 SQL Server 配置

ODBC数据库连接SQL Server失败?啥原因啊!~~

SQL Server连接不上

jTDS Java连接SQL Server 2000数据库

将实体框架连接字符串转换为 SQL Server Express