Jackson JSON如何设置http连接和读取超时

时间:2015-12-08 21:45:44

标签: java json jackson tomcat7 jersey-2.0

(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)功能吗?

2 个答案:

答案 0 :(得分:4)

你可以破解价值

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客户端或一些高级解决方案。

答案 1 :(得分:3)

这种特殊的读取方法是为了方便,但不可配置,通常对大多数生产用途都没有用。

相反,您可能希望使用其他方式从InputStream个端点获取URL,然后将其传递给ObjectMapper / ObjectReader;这允许完全控制连接,超时等细节。它允许您使用除JDK默认配置的其他HTTP客户端。