简介:Neo4j 和 Spring Boot 集成
Neo4j 是一种开源的 NoSQL 图数据库,专为处理关联性强的大数据而设计。传统的关系型数据库(RDBMS)不擅长处理大量的关系数据,而 Neo4j 则通过基于图的模型使这些关系处理得更高效、直观。Spring Boot 提供了很多与 Neo4j 集成的便捷工具,如 spring-boot-starter-data-neo4j 启动器。
连接到 Neo4j 数据库
在 Spring Boot 中,可以通过自动配置的 org.neo4j.driver.Driver 访问 Neo4j 数据库。默认情况下,驱动会尝试连接到 localhost:7687 上使用 Bolt 协议的 Neo4j 服务器。
以下代码展示了如何注入 Neo4j 的 Driver 并创建一个节点:
import org.neo4j.driver.Driver;
import org.neo4j.driver.Session;
import org.neo4j.driver.Values;
import org.springframework.stereotype.Component;@Component
public class MyBean {private final Driver driver;public MyBean(Driver driver) {this.driver = driver;}public String someMethod(String message) {try (Session session = this.driver.session()) {return session.executeWrite((transaction) -> transaction.run("CREATE (a:Greeting) SET a.message = $message RETURN a.message + ', from node ' + id(a)",Values.parameters("message", message)).single().get(0).asString());}}
}
配置 Neo4j 连接参数
你可以通过 spring.neo4j.*
属性配置连接参数,如 URI 和认证信息:
application.properties:spring.neo4j.uri=bolt://my-server:7687
spring.neo4j.authentication.username=neo4j
spring.neo4j.authentication.password=secret
可以通过 ConfigBuilderCustomizer 来细化 Driver 的配置。
Spring Data Neo4j Repositories
Spring Data Neo4j 提供了强大的仓库支持。通过 Neo4jRepository,你可以像操作关系型数据库一样操作图数据库。
以下是定义 City 节点实体及其仓库的示例:
import java.util.Optional;
import org.springframework.data.neo4j.repository.Neo4jRepository;public interface CityRepository extends Neo4jRepository<City, Long> {Optional<City> findOneByNameAndState(String name, String state);
}
通过使用 spring-boot-starter-data-neo4j 启动器,自动配置了仓库支持和事务管理。Spring Boot 还支持经典的和响应式的 Neo4j 仓库。通过 Neo4jTemplate 或 ReactiveNeo4jTemplate 实现数据访问。响应式模式自动配置支持 Project Reactor。
启用事务管理
在使用响应式模式时,ReactiveTransactionManager 需要手动配置:
import org.neo4j.driver.Driver;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.neo4j.core.ReactiveDatabaseSelectionProvider;
import org.springframework.data.neo4j.core.transaction.ReactiveNeo4jTransactionManager;@Configuration(proxyBeanMethods = false)
public class MyNeo4jConfiguration {@Beanpublic ReactiveNeo4jTransactionManager reactiveTransactionManager(Driver driver,ReactiveDatabaseSelectionProvider databaseNameProvider) {return new ReactiveNeo4jTransactionManager(driver, databaseNameProvider);}
}
总结
Spring Boot 3.3 提供了丰富的 Neo4j 集成支持,简化了与图数据库的交互。无论是经典的数据库操作还是响应式操作模式,Spring Boot 都能为开发者提供自动配置和高效的数据访问支持。通过结合 Neo4j 的强大图数据建模能力和 Spring Boot 的开发便利性,企业级应用可以更高效地处理复杂的数据关系。
微信公众号:九极客