此 java.net.ConnectException 的根本原因可能是什么,如何解决?

What could be the root cause of this java.net.ConnectException, and how to resolve it?

上下文

我正在尝试在 Java 企业应用程序(部署在 Wildfly 8.2 应用程序服务器上)中打开到网站的 HTTP 连接。我使用相当标准的工具来执行此操作 - Jsoup 库。 大多数时间,连接打开没有问题,我可以读取和解析网站内容(用于进一步处理)。

但是,如果一旦打开失败(超时)- 它将永远不会再次成功,直到应用程序完全重新启动。任何尝试打开到同一网站的连接都将再次失败并出现相同的异常。就好像应用程序记住了网站的 inaccessible 状态,并坚持这个假设,不再尝试。 (我相当有信心,即使网站可以访问,应用程序仍然会一次又一次地抛出此异常。)

异常

Caused by: java.net.ConnectException: Connection timed out: connect
    at java.net.TwoStacksPlainSocketImpl.socketConnect(Native Method) [rt.jar:1.8.0_31]
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) [rt.jar:1.8.0_31]
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) [rt.jar:1.8.0_31]
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source) [rt.jar:1.8.0_31]
    at java.net.PlainSocketImpl.connect(Unknown Source) [rt.jar:1.8.0_31]
    at java.net.SocksSocketImpl.connect(Unknown Source) [rt.jar:1.8.0_31]
    at java.net.Socket.connect(Unknown Source) [rt.jar:1.8.0_31]
    at sun.net.NetworkClient.doConnect(Unknown Source) [rt.jar:1.8.0_31]
    at sun.net.www.http.HttpClient.openServer(Unknown Source) [rt.jar:1.8.0_31]
    at sun.net.www.http.HttpClient.openServer(Unknown Source) [rt.jar:1.8.0_31]
    at sun.net.www.http.HttpClient.<init>(Unknown Source) [rt.jar:1.8.0_31]
    at sun.net.www.http.HttpClient.New(Unknown Source) [rt.jar:1.8.0_31]
    at sun.net.www.http.HttpClient.New(Unknown Source) [rt.jar:1.8.0_31]
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source) [rt.jar:1.8.0_31]
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(Unknown Source) [rt.jar:1.8.0_31]
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source) [rt.jar:1.8.0_31]
    at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source) [rt.jar:1.8.0_31]
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:449) [jsoup-1.8.1.jar:]
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:434) [jsoup-1.8.1.jar:]
    at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:181) [jsoup-1.8.1.jar:]
    at org.jsoup.helper.HttpConnection.get(HttpConnection.java:170) [jsoup-1.8.1.jar:]

问题

您可能遇到了 dns 兑现问题 jdk 与 wildfly 本身无关。

尝试设置 networkaddress.cache.ttl 或 networkaddress.cache.negative.ttl 系统 属性 来控制 dns 缓存的行为方式。

更多详情o。这个看https://docs.oracle.com/javase/7/docs/technotes/guides/net/properties.html

事实证明,(在这种特定情况下)网络配置不正确。不仅是 JVM,其他几个程序也遇到了网络问题。