即使我没有收到响应,如何在一段时间后停止查询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}