Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Neo4j ogm中是否有关闭会话的API?_Java_Spring_Session_Neo4j_Neo4j Ogm - Fatal编程技术网

Java Neo4j ogm中是否有关闭会话的API?

Java Neo4j ogm中是否有关闭会话的API?,java,spring,session,neo4j,neo4j-ogm,Java,Spring,Session,Neo4j,Neo4j Ogm,我使用的是neo4j ogm 1.1.4版本。 由于我使用了org.springframework.data.neo4j.template.Neo4jTemplate,这是我自己使用session对象创建的,我想知道是否有一个契约,一旦我的所有工作完成,我就必须标记会话已关闭 我发现了这个链接 但是我正在使用的库似乎在Session类上没有close方法。是否需要使用其他API来标记会话已关闭?从技术上讲,无需在Neo4j OGM中“关闭”会话。它并不表示与数据库的连接,而是维护应用程序和数据

我使用的是neo4j ogm 1.1.4版本。 由于我使用了org.springframework.data.neo4j.template.Neo4jTemplate,这是我自己使用session对象创建的,我想知道是否有一个契约,一旦我的所有工作完成,我就必须标记会话已关闭

我发现了这个链接


但是我正在使用的库似乎在Session类上没有close方法。是否需要使用其他API来标记会话已关闭?

从技术上讲,无需在Neo4j OGM中“关闭”会话。它并不表示与数据库的连接,而是维护应用程序和数据库之间的对话状态,允许OGM在“工作单元”(由应用程序定义)内加载和保存对象时生成高效的密码

有两种方法可以破坏这种对话状态。从应用程序代码的角度来看,它们都具有相同的效果

重用

session.clear()
允许您通过删除现有会话状态来重用现有会话对象

更换

session=sessionFactory.openSession()
将用新对象替换任何当前的
session
对象


这两个操作都将使OGM无法获得有关域对象相对于图形的同步状态的信息。(在Hibernate术语中,它们处于“分离”状态)OGM目前没有将域对象重新连接到新会话的机制,因此您应该始终将所有要使用的对象重新加载到新会话中。

我需要在后端处理多个数据库连接。因此,我实现了一个
springboot
unbounded池,它可以“工作”。这将处理@Vince答案中提到的
清除

@组件
公共类Neo4jOGMSessionPool实现ApplicationListener{
private@Value(“${neo4j.uri}”)字符串uri;
private@Value(“${neo4j.username}”)字符串用户名;
private@Value(“${neo4j.password}”)字符串密码;
私有最终映射队列=新ConcurrentHashMap();
private final ThreadLocal ThreadLocal=新ThreadLocal();
公共同步会话getSession(字符串数据库名){
LinkedBlockingQueue=queues.computeIfAbsent(databaseName,k->new LinkedBlockingQueue());
会话=queue.poll();
if(会话==null){
Configuration=new Configuration.Builder().uri(uri).凭据(用户名、密码).数据库(databaseName).验证连接(true).build();
SessionFactory SessionFactory=新SessionFactory(配置,“no.package”);
session=sessionFactory.openSession();
}
set(Maps.immutableEntry(databaseName,session));
返回会议;
}
@凌驾
ApplicationEvent上的公共无效(RequestHandledEvent事件){
Entry=threadLocal.get();
if(条目!=null){
会话=entry.getValue();
session.clear();
threadLocal.remove();
queues.get(entry.getKey()).add(session);
}
}
}

这样我就可以在函数中创建一个会话,使用它并让java gc处理它了?