尝试将 Java 应用程序连接到 Redshift 数据库时服务器关闭连接

Posted

技术标签:

【中文标题】尝试将 Java 应用程序连接到 Redshift 数据库时服务器关闭连接【英文标题】:Server closes connection when trying to connect Java application to Redshift database 【发布时间】:2018-05-06 16:09:17 【问题描述】:

我正在尝试将 Java 应用程序连接到 Redshift 数据库。当我运行 DriverManager.getConnection() 时,它坐了很长时间(几分钟),最后抛出异常:

Exception in thread "main" java.sql.SQLException: 
   [Amazon](600001) The server closed the connection.
at com.amazon.support.channels.TLSSocketChannel.readBytes(Unknown Source)
at com.amazon.support.channels.TLSSocketChannel.doHandshake(Unknown Source)
at com.amazon.support.channels.TLSSocketChannel.<init>(Unknown Source)
at com.amazon.redshift.client.PGClient.checkSSL(Unknown Source)
at com.amazon.redshift.client.PGClient.<init>(Unknown Source)
at com.amazon.redshift.core.PGJDBCConnection.connect(Unknown Source)
at com.amazon.jdbc.common.BaseConnectionFactory.doConnect(Unknown Source)
at com.amazon.jdbc.common.AbstractDriver.connect(Unknown Source)
at com.amazon.redshift.jdbc.Driver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:247)

我可以在同一台机器上使用来自 SQL Workbench 的相同连接字符串和凭据进行连接。此外,如果我为连接提供了错误的凭据,则会出现身份验证错误。所以我不认为这是亚马逊的安全问题,这似乎是无法连接的最常见原因。

其他想法?

更新:谜团加深。团队的其他成员能够签出代码并成功运行。我们团队的共享 Maven 存储库中有驱动程序。

【问题讨论】:

挂了很久,说明网络连接不成功。与您的 Redshift 实例关联的安全组的配置是什么?您是否尝试从 Internet 上的计算机进行连接?如果是,您的 Redshift 实例是否可公开访问(在公共子网中,域名解析为公共 IP)? @JohnRotenstein 现在,它向全世界开放。并且这些问题中的任何一个是否也会阻止来自我的 SQL 查询工具(在同一台机器上运行)的连接工作?并阻止身份验证检查? 啊!好的,所以在某些机器上它可以工作,而在某些机器上它会挂起。很明显,这将是由于机器上的某些东西而不是 Redshift 配置。您使用什么客户端/驱动程序进行连接?你在用Redshift JDBC Driver吗? @JohnRotenstein 是的 - 4.2 兼容驱动程序。 1.2.12.1017。我们都在使用来自共享 maven 存储库的同一个。 【参考方案1】:

嗯...不确定是什么问题。但我做了一个 Eclipse 更新,它就消失了。

【讨论】:

以上是关于尝试将 Java 应用程序连接到 Redshift 数据库时服务器关闭连接的主要内容,如果未能解决你的问题,请参考以下文章

将 R 连接到 Redshift 时出错

如何连接到 Redshift 中的私有集群?

尝试使用 node-redshift 从节点连接到 redshift 时超时

如何使用 dplyr 和 RPostgreSQL 将 r 连接到 redshift?

使用 Amazon Redshift 连接到数据库

Google Data Studio 目前可以连接到 AWS RDS 或 Redshift 吗?