无法将spring-data-neo4j连接到远程数据库

时间:2015-05-29 23:30:25

标签: spring neo4j spring-boot spring-data spring-data-neo4j

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

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

这是我可以找到的唯一代码示例,用于从spring boot连接到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的引用,所以我在我的Main应用程序类中处理如下:

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)

2 个答案:

答案 0 :(得分:1)

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

也许您可以检查mvn dependency:tree是否有SDN的旧版本,如果是,请更新spring-boot-starter的neo4-version-property。

示例应用程序在这里:

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

答案 1 :(得分:0)

您提供的参考不包含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>