为 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 框架生成在启动期间)。这将有效地为事务的生命周期(它被划分的地方)创建一个会话,一旦超出范围,就允许它被垃圾收集。
在 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 框架生成在启动期间)。这将有效地为事务的生命周期(它被划分的地方)创建一个会话,一旦超出范围,就允许它被垃圾收集。