Jackson JSON 如何设置 http 连接和读取超时
Jackson JSON how to set http connection and read timeout
(jersey-common=2.21.0, jackson-core=2.6.1)
如果调用了 createParser(URL url),如何设置 http 连接超时(连接、读取)?使用的默认值是多少?
JsonFactory jsonF = new JsonFactory();
jsonF.enable(JsonParser.Feature.AUTO_CLOSE_SOURCE);
JsonParser jsonP = jsonF.createParser(url); // URL instance
try {
JsonToken token;
while ( (token=jsonP.nextToken()) != null) {
if (token == JsonToken.START_OBJECT)
..rest "json sax" parser code...
}
} finally {
jsonP.close();
}
当 webapp 停止读取 json 资源时,我每周都会遇到几次反复出现的问题,任务每 30 分钟自动运行一次。我怀疑这个 http 调用停止并开始堆积,直到 JVM 出现故障。
我不应该在生产应用程序中使用 createParser(URL) 函数吗?
您可以破解这些值
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
有关设置的更多信息,请访问
https://docs.oracle.com/javase/7/docs/technotes/guides/net/properties.html
或者您可以改为进行适当的调用,然后将结果传递给 json 解析器。我会选择后者。
所以简单地说,虽然 URL 是一个很好的轻量级替代方案,但我建议切换到 apache http 客户端或一些高级解决方案。
该特定的读取方法是为了方便起见,但不可配置,并且通常对大多数生产用途没有太大用处。
相反,您可能希望使用其他方式从 URL
端点获取 InputStream
,然后将其传递给 ObjectMapper
/ ObjectReader
;这允许完全控制连接、超时等细节。它允许您使用 JDK 配备的默认客户端以外的其他 HTTP 客户端。
(jersey-common=2.21.0, jackson-core=2.6.1)
如果调用了 createParser(URL url),如何设置 http 连接超时(连接、读取)?使用的默认值是多少?
JsonFactory jsonF = new JsonFactory();
jsonF.enable(JsonParser.Feature.AUTO_CLOSE_SOURCE);
JsonParser jsonP = jsonF.createParser(url); // URL instance
try {
JsonToken token;
while ( (token=jsonP.nextToken()) != null) {
if (token == JsonToken.START_OBJECT)
..rest "json sax" parser code...
}
} finally {
jsonP.close();
}
当 webapp 停止读取 json 资源时,我每周都会遇到几次反复出现的问题,任务每 30 分钟自动运行一次。我怀疑这个 http 调用停止并开始堆积,直到 JVM 出现故障。
我不应该在生产应用程序中使用 createParser(URL) 函数吗?
您可以破解这些值
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
有关设置的更多信息,请访问 https://docs.oracle.com/javase/7/docs/technotes/guides/net/properties.html
或者您可以改为进行适当的调用,然后将结果传递给 json 解析器。我会选择后者。
所以简单地说,虽然 URL 是一个很好的轻量级替代方案,但我建议切换到 apache http 客户端或一些高级解决方案。
该特定的读取方法是为了方便起见,但不可配置,并且通常对大多数生产用途没有太大用处。
相反,您可能希望使用其他方式从 URL
端点获取 InputStream
,然后将其传递给 ObjectMapper
/ ObjectReader
;这允许完全控制连接、超时等细节。它允许您使用 JDK 配备的默认客户端以外的其他 HTTP 客户端。