在 SDN 4.1 引用中,配置包括扩展 Neo4jConfiguration 并将 Session 对象显式设置为 @Bean。在 4.2 中,指导是不要扩展 Neo4jConfiguration 并遵循以下配置。请注意,没有明确设置独立的 Session 对象:
@Bean
public org.neo4j.ogm.config.Configuration configuration() {
org.neo4j.ogm.config.Configuration config = new org.neo4j.ogm.config.Configuration();
config
.driverConfiguration()
.setDriverClassName("org.neo4j.ogm.drivers.embedded.driver.EmbeddedDriver")
.setURI(dbLocation);
return config;
@Bean
public SessionFactory sessionFactory() {
SessionFactory sessionFactory = new SessionFactory(configuration(), "org.my.package" );
sessionFactory.register(new MyPreSaveListener());
return sessionFactory;
}
我已经看到在存储库类中 @Autowiring Session 对象本身(而不是工厂)时使用了此配置。这是否意味着应用程序中将只有一个 Session 实例?如果是这样,这是否违背了 session 生命周期应限于应用程序的“工作单元”的想法?
请注意,我的存储库是自定义的,不会扩展 neo4j 存储库,因为我目前正在不再使用 Neo4jTemplate 对象。
最佳答案
不,每个应用程序没有一个 session 。只要从 @Transactional
注释或 TransactionTemplate
中调用您的 Session
,它就会调用代理 Session
(由 Spring Data Neo4j 框架在启动期间生成)。这将有效地在事务的生命周期(它被划分的地方)创建一个 session ,并且一旦超出范围,就允许它被垃圾收集。
关于java - SDN 4.2 嵌入式 Autowiring Neo4j OGM session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42676007/