微服务架构之Spring Boot(四十八)
31.3 Neo4j
Neo4j是一个开源的NoSQL图形数据库,它使用由一级关系连接的节点的丰富数据模型,与传统的RDBMS方法相比,它更适合于连接的大数
据。Spring Boot为使用Neo4j提供了一些便利,包括 spring-boot-starter-data-neo4j “Starter”。
31.3.1连接到Neo4j数据库
要访问Neo4j服务器,您可以注入自动配置的 org.neo4j.ogm.session.Session 。默认情况下,实例尝试使用Bolt协议连接
到 localhost:7687 的Neo4j服务器。以下示例显示了如何注入Neo4j Session :
@Component
public class MyBean {
private final Session session;
@Autowired
public MyBean(Session session) {
this.session = session;
}
// ...
}
您可以通过设置 spring.data.neo4j.* 属性来配置要使用的URI和凭据,如以下示例所示:
spring.data.neo4j.uri=bolt://my-server:7687
spring.data.neo4j.username=neo4j
spring.data.neo4j.password=secret
您可以通过添加 org.neo4j.ogm.config.Configuration @Bean 来完全控制会话创建。此外,添加 @Bean 类型 SessionFactory 会禁用自动
配置并为您提供完全控制权。
31.3.2使用嵌入模式
如果将 org.neo4j:neo4j-ogm-embedded-driver 添加到应用程序的依赖项中,Spring Boot会自动配置Neo4j的进程内嵌入式实例,该应用程
序在应用程序关闭时不会保留任何数据。
由于嵌入式Neo4j OGM驱动程序本身不提供Neo4j内核,因此您必须自己声明 org.neo4j:neo4j 为依赖项。有关兼容版本的列
当类路径上有多个驱动程序时,嵌入式驱动程序优先于其他驱动程序。您可以通过设置 spring.data.neo4j.embedded.enabled=false 来明
确禁用嵌入模式。
如果嵌入式驱动程序和Neo4j内核如上所述位于类路径上,则数据Neo4j测试会自动使用嵌入式Neo4j实例。
您可以通过在配置中提供数据库文件的路径来为嵌入模式启用持久性,例
如 spring.data.neo4j.uri=file://var/tmp/graph.db 。
31.3.3 Neo4jSession
默认情况下,如果您正在运行Web应用程序,则会话将绑定到该线程以进行整个请求处理(即,它使用“在视图中打开会话”模式)。如果您不
想要此行为,请将以下行添加到您的 application.properties 文件中:
spring.data.neo4j.open-in-view=false
31.3.4 Spring数据Neo4j存储库
Spring数据包括Neo4j的存储库支持。
Spring数据Neo4j与Spring Data JPA共享公共基础架构,正如许多其他Spring数据模块那样。您可以从之前的JPA示例中将 City 定义为Neo4j
OGM @NodeEntity 而不是JPA @Entity ,并且存储库抽象以相同的方式工作,如以下示例所示:
package com.example.myapp.domain;
import java.util.Optional;
import org.springframework.data.neo4j.repository.*;
public interface CityRepository extends Neo4jRepository<City, Long> {
Optional<City> findOneByNameAndState(String name, String state);
}
spring-boot-starter-data-neo4j “Starter”启用存储库支持以及事务管理。您可以在 @Configuration - bean上分别使
用 @EnableNeo4jRepositories 和 @EntityScan 来自定义位置以查找存储库和实体。