我正在测试基于SDN4的Web服务,在一些特定的性能测试中,我注意到数据库死锁正在发生。我决定通过捕获适当的异常并尝试多次来使我的应用程序“死锁证明”。我使用了org.neo4j.kernel.DeadlockDetectedException,但是把它放到catch中没有用,所以我只是把java.lang.Exception用来捕获任何东西。我的结果是这样的:
使用嵌入式数据库e.toString()给出:
java.lang.RuntimeException: org.neo4j.kernel.DeadlockDetectedException: LockClient[136] can't wait on resource RWLock[NODE(24437), hash=1741255175] since => LockClient[136] <-[:HELD_BY]- RWLock[NODE(24422), hash=592554821] <-[:WAITING_FOR]- LockClient[133] <-[:HELD_BY]- RWLock[NODE(24437), hash=1741255175]
使用独立数据库e.toString()给出:
org.springframework.dao.DataRetrievalFailureException: Could not parse response; nested exception is org.neo4j.ogm.exception.ResultProcessingException: Could not parse response
特别是第二种情况给出了非常一般的例外。抓住这个我不能确定它真的是死锁或其他什么。只有使用wireshark,我才能看到数据库响应真的“死锁”。第一个也看起来很奇怪,因为DeadlockDetectedException在RuntimeException中,所以我无法捕获它。而且这两种情况都不一致。这是预期的行为吗?