我在我的 play 应用程序中使用 Neo4j java驱动程序。
目前,我为每个控制器(即每个 http 调用)初始化一个新驱动程序。当自动关闭关闭方法运行时,它似乎阻塞了整个调用大约两秒钟。在不关闭驱动程序的情况下运行(显然是个坏主意)将我的测试从 25 秒缩短到 5 秒。
我确实怀疑我以错误的方式使用驱动程序,我想我应该使用一个驱动程序应用程序,但不知道如何。在play框架中使用java Neo4j驱动的正确方法是什么?
我在我的 play 应用程序中使用 Neo4j java驱动程序。
目前,我为每个控制器(即每个 http 调用)初始化一个新驱动程序。当自动关闭关闭方法运行时,它似乎阻塞了整个调用大约两秒钟。在不关闭驱动程序的情况下运行(显然是个坏主意)将我的测试从 25 秒缩短到 5 秒。
我确实怀疑我以错误的方式使用驱动程序,我想我应该使用一个驱动程序应用程序,但不知道如何。在play框架中使用java Neo4j驱动的正确方法是什么?
Driver接口的 Javadoc指出:
驱动程序实现通常是线程安全的,充当会话创建的模板并托管连接池。所有配置和身份验证设置都由驱动程序保持不变。如果需要不同的设置,应该创建一个新的 Driver 实例。
驱动程序为每个远程 Neo4j 服务器维护一个连接池。因此,使用驱动程序的最有效方法是在整个应用程序中使用相同的实例。
因此,通常,您应该使用单个Driver
实例。
共享同一个实例的一种方法是实现一个提供单例 Driver
实例的工厂类。这是一个非常基本的线程安全示例:
class DriverFactory {
private static Driver instance;
public static synchronized Driver getDriver() {
if (instance == null) {
instance = GraphDatabase.driver(...);
}
return instance;
}
}