這非常奇怪,但我每次嘗試通過JDBC連接到SQL Azure時都反覆出現此問題。JDBC Broken Pipe Mac
環境:Eclipse的氧氣,蘋果塞拉利昂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");
它返回非null。但是,當我嘗試獲得連接時:
Connection con = ds.getConnection()
它在此處掛起,然後用損壞的管道錯誤超時。我還列出了Azure門戶中適當的IP地址的白名單。
我的SQLPro客戶端能夠連接到數據庫並查看它的內容,所以不應該有用戶名/密碼和連接字符串的任何問題。
我已確認我的主機名設置正確。使用:
scutil --get HostName
我試過了所有我能想到但仍然沒有運氣的東西。我開始認爲OSX上的Java運行時存在一些問題。有人有主意嗎 ?
編輯:我在Windows環境和JDK上使用了相同的確切文件,並沒有看到這個問題。所以我相信這是Mac特定的...