在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实例?如果是这样,那是否违背了会话生命周期应限于应用程序的“工作单元”的想法?
请注意,我的存储库是自定义的,不会扩展neo4j存储库,因为我目前正在迁移使用Neo4jTemplate对象。
答案 0 :(得分:1)
不,每个应用程序没有一个会话。只要从Session
注释或@Transactional
内调用TransactionTemplate
,它就会调用代理Session
(在启动期间由Spring Data Neo4j框架生成)。这将有效地为事务的生命周期(划分区域)创建会话,并且一旦超出范围,就允许对其进行垃圾回收。