我正在查看 Neo4j 驱动程序的最新版本,它有一个关于事务超时的好功能,即,如果它无法在时间限制内返回结果,您可以进行查询以停止。
我不清楚如何检测和恢复此类超时事件的发生(就我而言,我有许多查询来收集潜在的相关数据,并且我可以忽略太慢查询的结果)。是否有抛出特定的异常?还是有其他机制?
有几种设置超时的方法。这是一种方法:在调用
session.beginTransaction()
时指定超时。
首先创建一个具有超时值的
TransactionConfig
。下面的示例创建了一个超时为 5 秒的配置:
TransactionConfig config = TransactionConfig.builder()
.withTimeout(Duration.ofSeconds(5))
.build();
然后创建一个新交易,并使用您刚刚创建的
config
:
try (Transaction transaction = neo4jDriver.session().beginTransaction(config)) {
// do stuff
transaction.commit();
}
如果超过超时,事务将中止并抛出
org.neo4j.driver.exceptions.ClientException
。
把它们放在一起,它可能看起来像这样:
TransactionConfig config = TransactionConfig.builder()
.withTimeout(Duration.ofSeconds(5))
.build();
try (Transaction transaction = neo4jDriver.session().beginTransaction(config)) {
// do stuff
transaction.commit();
} catch (ClientException e) {
// handle this
}
注意:此技术 - 使用
TransactionConfig
- 适用于驱动程序,但在使用 OGM 时不可能(我也没有找到任何等效的方法)设置超时。