我正在构建一个小概念证明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)
答案 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
,正如您所看到的那样,它也在文档中:
答案 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>