JDBC 断管 Mac

Posted

技术标签:

【中文标题】JDBC 断管 Mac【英文标题】:JDBC Broken Pipe Mac 【发布时间】:2018-01-10 23:17:45 【问题描述】:

这很奇怪,但每次我尝试通过 JDBC 连接到 SQL Azure 时都会反复遇到这个问题。

环境:Eclipse Oxygen、Mac Sierra 10.12.6、JDK 1.8.0_141

我看到以下错误:

Cannot create PoolableConnectionFactory (Broken pipe (Write failed) ClientConnectionId:ac4ed2ba-4563-4f3b-9bcc-441bff9e45e1)

我正在尝试通过 context.xml 以最基本的方式创建连接:

 <Resource name="jdbc/sqlazure"
auth="Container"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
type="javax.sql.DataSource"
maxIdle="30"
username="<user>
password="<password>
url="jdbc:sqlserver://<dbname>.database.windows.net:1433;database=<db>;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;"
removeAbandonedTimeout="30"
logAbandoned="true" /> 

在我的 servlet init() 中,我得到了这样的数据源:

 ds = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/sqlazure");

它返回非空值。但是,当我尝试建立连接时:

Connection con = ds.getConnection()

它在这里挂起,然后因管道损坏错误而超时。我还在 Azure 门户中将相应的 IP 地址列入了白名单。

我的 SQLPro 客户端能够连接到数据库并查看其内容,因此用户名/密码和连接字符串应该没有任何问题。

我已确认我的主机名设置正确。使用:

scutil --get HostName

我已经尝试了我能想到的一切,但仍然没有运气。我开始认为 OSX 上的 Java 运行时存在一些问题。有人有什么想法吗?

编辑:我在 Windows 环境和 JDK 上使用了相同的文件,没有看到这个问题。所以我相信这是 Mac 特有的......

【问题讨论】:

【参考方案1】:

您的问题与其他 SO 线程 How to connect to Azure SQL with JDBC 非常相似。请尝试来自here 的同一问题帖子的解决方案。

【讨论】:

【参考方案2】:

您可能需要安装 Homebrew 和 Maven 才能使其工作。请按照here提供的说明进行操作。

【讨论】:

以上是关于JDBC 断管 Mac的主要内容,如果未能解决你的问题,请参考以下文章

IOException:断管

哈德森:“是的:标准输出:断管”

Nginx 调试 Django 时出现“断管”?

Adwords API 并行报错(多处理断管)

Grails 应用程序上的断管异常

Python:PyNomo 示例的断管错误(在 Nomographer 函数中)