即使我没有收到响应,如何在一段时间后停止查询sparql jena

即使我没有收到响应,如何在一段时间后停止查询sparql jena,sparql,jena,Sparql,Jena,如果没有返回或没有响应,我需要多次运行此查询 终点: http://opendata.comune.arezzo.it/services/lod/sparql 查询: SELECT DISTINCT ?p WHERE { ?s a <https://ldp.ldpgis.it/ontologies/1/ldpgisOntology/LdPOntology.rdf#clAccessoEsterno>. ?s ?p ?o } 当我运行这段代码时,它会在whil

如果没有返回或没有响应,我需要多次运行此查询

终点:

http://opendata.comune.arezzo.it/services/lod/sparql
查询:

SELECT DISTINCT ?p
WHERE
  { ?s a <https://ldp.ldpgis.it/ontologies/1/ldpgisOntology/LdPOntology.rdf#clAccessoEsterno>.
    ?s    ?p  ?o
  }
当我运行这段代码时,它会在while的前几个周期工作,最后在执行
results=exec.execSelect()时卡住

我想做的是在特定时间后停止查询执行即使我没有收到响应。可能吗

谢谢


EDIT=>已在下面的评论中解决

这就是超时应该做的。我不明白为什么要多次运行同一个查询,但没问题。如果这种超时不起作用,可以使用Java线程。别忘了打电话给exec.close()
hi谢谢你的回答。如果端点没有应答,我需要再试一次,这就是我尝试多次的原因。超时不起作用,我已经在使用Java线程了。如果在
results=exec.execSelect()之后使用
exec.close()它将永远不会执行,因为执行会停留在
results=exec.execSelect()嗯,是的。你必须创建一个新的。请尝试
while(success==false&&maxRepNumber>0){try(QueryEngineHTTP-exec=QueryExecutionFactory.createServiceRequest(endpoint.getEndpointUri(),qs.asQuery()){exec.setTimeout(120000,TimeUnit.millides,120000,TimeUnit.millides);results=exec.execSelect();success=true;}catch(例外情况e){maxRepNumber--;}}
-如果您在短时间内运行了太多请求,您的解决方案可能也会被阻止。谢谢。我会再运行几个测试,让您知道。如果有效,您可以写下答案,我会将其标记为正确。
Boolean success = false;
ResultSet results = null;


success = false;
int maxRepNumber = 2;
ParameterizedSparqlString qs = new ParameterizedSparqlString(Query above);
QueryEngineHTTP exec = QueryExecutionFactory.createServiceRequest(endpoint.getEndpointUri(), qs.asQuery());

while (success == false && maxRepNumber > 0) {
    try { exec.setTimeout(120000, TimeUnit.MILLISECONDS, 120000, TimeUnit.MILLISECONDS);
          results = exec.execSelect();
          success = true;
    } catch (Exception e) {
        maxRepNumber--;
    }                   
}
if(success == true){//do things}