无法获取 spring-data-neo4j 以连接到远程数据库

Cannot get spring-data-neo4j to connect to remote database

我正在构建一个小的概念证明 Spring 引导应用程序,它应该连接到 Neo4j 实例并在几个不同的节点上执行一些基本操作。如果我使用以下代码连接主应用程序 class 以创建嵌入式 Neo4j 服务,则一切正常。 (这是基于工作示例https://spring.io/guides/gs/accessing-neo4j-data-rest/

@Bean(destroyMethod = "shutdown")
public GraphDatabaseService graphDatabaseService() {
    return new GraphDatabaseFactory().newEmbeddedDatabase("target/hello.db");
}

这是我能找到的唯一用于从 spring 启动连接到 Neo4j 服务器的代码示例。如果我尝试连接到远程服务器,则代码无法以该问题末尾的异常开始。我们的计划是 运行 一个集中的 Neo4j 实例,这显然是一个常见的生产需求。

我如何或应该如何配置我的 bean 以连接到远程 Neo4j 数据库,或者有人知道这种设置的可靠工作示例吗?

谢谢!

我的 pom.xml 包括以下内容:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-rest</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-neo4j</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-neo4j-rest</artifactId>
        <version>3.3.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

我看到了一些关于使用 SpringCypherRestGraphDatabase 的参考,所以我在我的主应用程序中处理了这个 class 如下:

import org.neo4j.graphdb.GraphDatabaseService;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.data.neo4j.config.EnableNeo4jRepositories;
import org.springframework.data.neo4j.config.Neo4jConfiguration;
import org.springframework.data.neo4j.rest.SpringCypherRestGraphDatabase;

@SpringBootApplication
@EnableNeo4jRepositories
public class ProfileServiceApplication extends Neo4jConfiguration {

    public ProfileServiceApplication() {
        setBasePackage("profile");
    }

    @Bean
    public GraphDatabaseService graphDatabaseService() {
        return new SpringCypherRestGraphDatabase("http://localhost:7474/db/data/","neo4j","password");
    }

    public static void main(String[] args) {
        SpringApplication.run(ProfileServiceApplication.class, args);
    }
}

当我尝试使用此配置 运行 时,出现以下错误:

nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.neo4j.graphdb.GraphDatabaseService]: Circular reference involving containing bean 'profileServiceApplication' - consider declaring the factory method as static for independence from its containing instance. Factory method 'graphDatabaseService' threw exception; nested exception is java.lang.NoClassDefFoundError: org/springframework/data/neo4j/core/UpdateableState
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1210)

请将您的应用程序作为 github 项目共享以进行测试。也许这也是 spring-boot-starter 的依赖问题?您使用的是哪个启动版本??

也许你可以检查 mvn dependency:tree 是否有任何旧版本的 SDN 被引入,如果有,更新 spring-boot-starter 的 neo4-version-属性 .

示例应用程序在这里:

http://neo4j.com/developer/java/#_using_spring_data_neo4j

正如您正确看到的那样,它也在文档中:

http://docs.spring.io/spring-data/data-neo4j/docs/3.3.0.RELEASE/reference/html/#using_spring_data_neo4j_as_a_neo4j_server_client

您提供的参考不包含 Neo4j URL。

因此这里是 Application.properties 文件以连接到您的 Neo4j。

spring.data.neo4j.uri=bolt://localhost
spring.data.neo4j.username=neo4j
spring.data.neo4j.password=Your_Password

将您的 Neo4j 数据库作为控制台应用程序启动,它最有可能 运行 在 localhost:7474 端口上。

启动命令:

neo4j console

还要检查依赖关系。由于最新版本仅适用于

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-neo4j</artifactId>
</dependency>