为 SDN 4.2 Embedded 自动装配 Neo4j OGM 会话

Autowiring Neo4j OGM Session for SDN 4.2 Embedded

在 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 生命周期应限于应用程序的 "unit of work?"

的想法

请注意,我的存储库是自定义的,不会扩展 neo4j 存储库,因为我目前正在迁移而不使用 Neo4jTemplate 对象。

不,每个应用程序没有一个会话。只要您的 Session 是从 @Transactional 注释或 TransactionTemplate 中调用的,它就会调用代理 Session(由 Spring Data Neo4j 框架生成在启动期间)。这将有效地为事务的生命周期(它被划分的地方)创建一个会话,一旦超出范围,就允许它被垃圾收集。