这很奇怪,但每次尝试通过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");
它返回非null。但是,当我尝试建立连接时:
Connection con = ds.getConnection()
它在这里挂起,然后因管道损坏错误而超时。我还在Azure门户中列出了相应的IP地址。
我的SQLPro客户端能够连接到数据库并查看其内容,因此不应该存在用户名/密码和连接字符串的任何问题。
我确认我的主机名设置正确。使用:
scutil --get HostName
我已经尝试了我能想到的一切,但仍然没有运气。我开始认为OSX上的Java运行时存在一些问题。有人有什么想法吗?
编辑:我在Windows环境和JDK上使用了相同的确切文件,但没有看到这个问题。所以我相信这是Mac特有的......答案 0 :(得分:0)
答案 1 :(得分:0)
您的问题与其他SO主题How to connect to Azure SQL with JDBC非常相似。请尝试使用here上相同问题的解决方案。
希望它有所帮助。