此 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:]
问题
- 这可能是 Wildfly 的错误吗?
- 这个问题可以在应用服务器内部解决吗?比如调整配置参数,设置HTTP连接池(有这种东西吗?)
- 在 Java 企业应用程序中打开 HTTP 连接(即:使用非托管、非事务性资源)完全正确吗?
- 我还能如何访问只能通过 HTTP 访问的内容? (除了打开一个连接)
- 开发 JCA 适配器可以解决这个问题吗?
- 是否已经存在这样的 JCA 适配器? (我不可能是唯一遇到这个问题的人......)
您可能遇到了 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,其他几个程序也遇到了网络问题。
上下文
我正在尝试在 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:]
问题
- 这可能是 Wildfly 的错误吗?
- 这个问题可以在应用服务器内部解决吗?比如调整配置参数,设置HTTP连接池(有这种东西吗?)
- 在 Java 企业应用程序中打开 HTTP 连接(即:使用非托管、非事务性资源)完全正确吗?
- 我还能如何访问只能通过 HTTP 访问的内容? (除了打开一个连接)
- 开发 JCA 适配器可以解决这个问题吗?
- 是否已经存在这样的 JCA 适配器? (我不可能是唯一遇到这个问题的人......)
您可能遇到了 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,其他几个程序也遇到了网络问题。