无法获取 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
正如您正确看到的那样,它也在文档中:
您提供的参考不包含 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>
我正在构建一个小的概念证明 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
正如您正确看到的那样,它也在文档中:
您提供的参考不包含 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>