为SDN 4.2 Embedded

时间:2017-03-08 15:56:09

标签: java spring spring-data-neo4j spring-data-neo4j-4 neo4j-ogm

在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对象。

1 个答案:

答案 0 :(得分:1)

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