【问题标题】:Neo4j Driver in playNeo4j 驱动程序在玩
【发布时间】:2018-06-05 22:05:30
【问题描述】:
我在我的 play 应用程序中使用 Neo4j java driver。
目前我为每个控制器(即每个 http 调用)初始化一个新驱动程序。当自动关闭关闭方法运行时,它似乎阻塞了整个调用大约两秒钟。在不关闭驱动程序的情况下运行(显然是个坏主意)将我的测试从 25 秒缩短到 5 秒。
我确实怀疑我以错误的方式使用驱动程序,我想我应该在整个应用程序范围内使用一个驱动程序,但不知道如何使用。在play框架中使用java Neo4j驱动的正确方法是什么?
【问题讨论】:
标签:
java
neo4j
playframework
connection-pooling
autocloseable
【解决方案1】:
Driver 接口的 Javadoc 说明:
驱动程序实现通常是线程安全的,充当模板
用于创建会话并托管连接池。所有配置和
身份验证设置由驱动程序保持不变。应该
需要不同的设置,一个新的 Driver 实例应该是
已创建。
驱动程序为每个远程 Neo4j 服务器维护一个连接池。
因此,使用 Driver 最有效的方法是使用
整个应用程序中的相同实例。
因此,一般来说,您应该使用单个 Driver 实例。
共享同一个实例的一种方法是实现一个提供singletonDriver 实例的工厂类。这是一个非常基本的线程安全示例:
class DriverFactory {
private static Driver instance;
public static synchronized Driver getDriver() {
if (instance == null) {
instance = GraphDatabase.driver(...);
}
return instance;
}
}