java - 我无法将我的 SpringbootApplication 与 Neo4j 连接
问题描述
我正在尝试使用 Neo4j 运行我的 Spring Boot Web 应用程序。我正在使用它,但似乎无法正常工作。我总是收到一个以“java.lang.IllegalStateException: Failed to execute CommandLineRunner”开头的错误
我正在使用 Springboot 版本 2.2.2
这是我的 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>accessing-data-neo4j</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>accessing-data-neo4j</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-neo4j</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
这是我的 SpringApplicationClass:
@SpringBootApplication
@EnableNeo4jRepositories
public class AccessingDataNeo4jApplication {
private final static Logger log = LoggerFactory.getLogger(AccessingDataNeo4jApplication.class);
public static void main(String[] args) throws Exception {
SpringApplication.run(AccessingDataNeo4jApplication.class, args);
}
@Bean
CommandLineRunner demo(PersonRepository personRepository, PlaceRepository placeRepository) {
return args -> {
// ===========================================================================================
// == places
// ===========================================================================================
personRepository.deleteAll();
placeRepository.deleteAll();
Place goldbekmarkt = new Place("Goldbekmarkt");
Place museum = new Place("Museum");
Place stadtpark = new Place("Stadtpark");
Place hagenbecksTierpark = new Place("HagenbecksTierpark");
Place stMichaelis = new Place("St.Michaelis");
List<Place> places = Arrays
.asList(goldbekmarkt, museum, stadtpark, hagenbecksTierpark, stMichaelis);
placeRepository.saveAll(places);
// ===========================================================================================
// == persons
// ===========================================================================================
Person orhan = new Person("Orhan");
Person yusuf = new Person("Yusuf");
Person steph = new Person("Steph");
Person lebron = new Person("Lebron");
Person kevin = new Person("Kevin");
Person kim = new Person("Kim");
Person tobias = new Person("Tobias");
Person robin = new Person("Robin");
Person niels = new Person("Niels");
Person daniel = new Person("Daniel");
Person michael = new Person("Michael");
Person elia = new Person("Elia");
List<Person> persons = Arrays
.asList(orhan, yusuf, steph, lebron, kevin, kim, tobias, robin, niels, daniel, michael,
elia);
personRepository.saveAll(persons);
// ===========================================================================================
// == connect places with persons
// ===========================================================================================
//List<WasInPlace> wasInPlaces = new ArrayList();
//wasInPlaces.add(new WasInPlace(new Date(), 20, orhan, winterhude));
goldbekmarkt.addPlace(new WasInPlace(new Date(), 20, orhan, goldbekmarkt));
goldbekmarkt.addPlace(new WasInPlace(new Date(), 20, robin, goldbekmarkt));
hagenbecksTierpark.addPlace(new WasInPlace(new Date(), 20, steph, hagenbecksTierpark));
hagenbecksTierpark.addPlace(new WasInPlace(new Date(), 20, lebron, hagenbecksTierpark));
museum.addPlace(new WasInPlace(new Date(), 20, kevin, museum));
museum.addPlace(new WasInPlace(new Date(), 20, yusuf, museum));
museum.addPlace(new WasInPlace(new Date(), 20, tobias, museum));
goldbekmarkt.addPlace(new WasInPlace(new Date(), 20, tobias, goldbekmarkt));
stadtpark.addPlace(new WasInPlace(new Date(), 20, kim, stadtpark));
stMichaelis.addPlace(new WasInPlace(new Date(), 20, niels, stMichaelis));
stMichaelis.addPlace(new WasInPlace(new Date(), 20, daniel, stMichaelis));
stMichaelis.addPlace(new WasInPlace(new Date(), 20, michael, stMichaelis));
stMichaelis.addPlace(new WasInPlace(new Date(), 20, elia, stMichaelis));
stadtpark.addPlace(new WasInPlace(new Date(), 20, yusuf, stadtpark));
placeRepository.saveAll(places);
// ===========================================================================================
// == connect person with person
// ===========================================================================================
orhan.addContact(yusuf, new Date(), 10);
orhan.addContact(steph, new Date(), 10);
orhan.addContact(lebron, new Date(), 10);
yusuf.addContact(kevin, new Date(), 20);
yusuf.addContact(kim, new Date(), 20);
steph.addContact(kim, new Date(), 10);
personRepository.saveAll(persons);
// ===========================================================================================
// == tests
// ===========================================================================================
System.out.println();
System.out.println("=======================================================================");
System.out.println("== TEST");
System.out.println("=======================================================================");
System.out.print(yusuf.getName() + ": ");
System.out
.println(yusuf.contacts.stream().map(o ->
o.getEnd().getName()).collect(joining(",")));
};
}
}
这是我的节点:
@NodeEntity
public class Person {
@Id
@GeneratedValue
private Long id;
private String name;
@Relationship(type = "befand_sich_an_ort")
private Set<Place> places;
@Relationship(type = HadContactWith.TYPE, direction = Relationship.UNDIRECTED)
public Set<HadContactWith> contacts = new HashSet<>();
public Person(String name) {
this.name = name;
}
public void addContact(Person target, Date date, int count) {
this.contacts.add(new HadContactWith(this, target, date, count));
}
public Set<Place> getPlaces() {
return places;
}
public void setPlaces(Set<Place> places) {
this.places = places;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<HadContactWith> getContacts() {
return contacts;
}
public void setContacts(Set<HadContactWith> contacts) {
this.contacts = contacts;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
这是我的错误:
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2021-06-04 13:27:32.912 ERROR 6188 --- [ main] o.s.boot.SpringApplication : Application run failed
java.lang.IllegalStateException: Failed to execute CommandLineRunner
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:787) [spring-boot-2.2.4.RELEASE.jar:2.2.4.RELEASE]
at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:768) [spring-boot-2.2.4.RELEASE.jar:2.2.4.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:322) [spring-boot-2.2.4.RELEASE.jar:2.2.4.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) [spring-boot-2.2.4.RELEASE.jar:2.2.4.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) [spring-boot-2.2.4.RELEASE.jar:2.2.4.RELEASE]
at com.example.accessingdataneo4j.AccessingDataNeo4jApplication.main(AccessingDataNeo4jApplication.java:26) [main/:na]
Caused by: org.springframework.transaction.CannotCreateTransactionException: Could not open Neo4j Session for transaction; nested exception is org.neo4j.ogm.exception.ConnectionException: Could not create driver instance
at org.springframework.data.neo4j.transaction.Neo4jTransactionManager.doBegin(Neo4jTransactionManager.java:204) ~[spring-data-neo4j-5.2.4.RELEASE.jar:5.2.4.RELEASE]
at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:376) ~[spring-tx-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:572) ~[spring-tx-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:360) ~[spring-tx-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:99) ~[spring-tx-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139) ~[spring-tx-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95) ~[spring-aop-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212) ~[spring-aop-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at com.sun.proxy.$Proxy83.deleteAll(Unknown Source) ~[na:na]
at com.example.accessingdataneo4j.AccessingDataNeo4jApplication.lambda$demo$1(AccessingDataNeo4jApplication.java:37) [main/:na]
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:784) [spring-boot-2.2.4.RELEASE.jar:2.2.4.RELEASE]
... 5 common frames omitted
Caused by: org.neo4j.ogm.exception.ConnectionException: Could not create driver instance
at org.neo4j.ogm.drivers.bolt.driver.BoltDriver.initializeDriver(BoltDriver.java:168) ~[neo4j-ogm-bolt-driver-3.2.6.jar:3.2.6]
at org.neo4j.ogm.drivers.bolt.driver.BoltDriver.checkDriverInitialized(BoltDriver.java:146) ~[neo4j-ogm-bolt-driver-3.2.6.jar:3.2.6]
at org.neo4j.ogm.drivers.bolt.driver.BoltDriver.lambda$null$0(BoltDriver.java:132) ~[neo4j-ogm-bolt-driver-3.2.6.jar:3.2.6]
at org.neo4j.ogm.session.transaction.DefaultTransactionManager.openTransaction(DefaultTransactionManager.java:75) ~[neo4j-ogm-core-3.2.6.jar:3.2.6]
at org.neo4j.ogm.session.Neo4jSession.beginTransaction(Neo4jSession.java:541) ~[neo4j-ogm-core-3.2.6.jar:3.2.6]
at org.springframework.data.neo4j.transaction.Neo4jTransactionManager.doBegin(Neo4jTransactionManager.java:182) ~[spring-data-neo4j-5.2.4.RELEASE.jar:5.2.4.RELEASE]
... 18 common frames omitted
Caused by: org.neo4j.driver.exceptions.ServiceUnavailableException: Unable to connect to localhost:7687, ensure the database is running and that there is a working network connection to it.
at org.neo4j.driver.internal.util.Futures.blockingGet(Futures.java:143) ~[neo4j-java-driver-4.0.0.jar:4.0.0-d03d93ede8ad65657eeb90ed890757203ecfaa7a]
at org.neo4j.driver.internal.util.Futures.blockingGet(Futures.java:113) ~[neo4j-java-driver-4.0.0.jar:4.0.0-d03d93ede8ad65657eeb90ed890757203ecfaa7a]
at org.neo4j.driver.internal.InternalDriver.verifyConnectivity(InternalDriver.java:159) ~[neo4j-java-driver-4.0.0.jar:4.0.0-d03d93ede8ad65657eeb90ed890757203ecfaa7a]
at org.neo4j.ogm.drivers.bolt.driver.BoltDriver.initializeDriver(BoltDriver.java:165) ~[neo4j-ogm-bolt-driver-3.2.6.jar:3.2.6]
... 23 common frames omitted
Suppressed: org.neo4j.driver.internal.util.ErrorUtil$InternalExceptionCause: null
at org.neo4j.driver.internal.async.connection.ChannelConnectedListener.databaseUnavailableError(ChannelConnectedListener.java:76) ~[neo4j-java-driver-4.0.0.jar:4.0.0-d03d93ede8ad65657eeb90ed890757203ecfaa7a]
at org.neo4j.driver.internal.async.connection.ChannelConnectedListener.operationComplete(ChannelConnectedListener.java:70) ~[neo4j-java-driver-4.0.0.jar:4.0.0-d03d93ede8ad65657eeb90ed890757203ecfaa7a]
at org.neo4j.driver.internal.async.connection.ChannelConnectedListener.operationComplete(ChannelConnectedListener.java:37) ~[neo4j-java-driver-4.0.0.jar:4.0.0-d03d93ede8ad65657eeb90ed890757203ecfaa7a]
at org.neo4j.driver.internal.shaded.io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:577) ~[neo4j-java-driver-4.0.0.jar:4.0.0-d03d93ede8ad65657eeb90ed890757203ecfaa7a]
at org.neo4j.driver.internal.shaded.io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:570) ~[neo4j-java-driver-4.0.0.jar:4.0.0-d03d93ede8ad65657eeb90ed890757203ecfaa7a]
at org.neo4j.driver.internal.shaded.io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:549) ~[neo4j-java-driver-4.0.0.jar:4.0.0-d03d93ede8ad65657eeb90ed890757203ecfaa7a]
at org.neo4j.driver.internal.shaded.io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:490) ~[neo4j-java-driver-4.0.0.jar:4.0.0-d03d93ede8ad65657eeb90ed890757203ecfaa7a]
at org.neo4j.driver.internal.shaded.io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:615) ~[neo4j-java-driver-4.0.0.jar:4.0.0-d03d93ede8ad65657eeb90ed890757203ecfaa7a]
at org.neo4j.driver.internal.shaded.io.netty.util.concurrent.DefaultPromise.setFailure0(DefaultPromise.java:608) ~[neo4j-java-driver-4.0.0.jar:4.0.0-d03d93ede8ad65657eeb90ed890757203ecfaa7a]
at org.neo4j.driver.internal.shaded.io.netty.util.concurrent.DefaultPromise.tryFailure(DefaultPromise.java:117) ~[neo4j-java-driver-4.0.0.jar:4.0.0-d03d93ede8ad65657eeb90ed890757203ecfaa7a]
at org.neo4j.driver.internal.shaded.io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.fulfillConnectPromise(AbstractNioChannel.java:321) ~[neo4j-java-driver-4.0.0.jar:4.0.0-d03d93ede8ad65657eeb90ed890757203ecfaa7a]
at org.neo4j.driver.internal.shaded.io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:337) ~[neo4j-java-driver-4.0.0.jar:4.0.0-d03d93ede8ad65657eeb90ed890757203ecfaa7a]
at org.neo4j.driver.internal.shaded.io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:688) ~[neo4j-java-driver-4.0.0.jar:4.0.0-d03d93ede8ad65657eeb90ed890757203ecfaa7a]
at org.neo4j.driver.internal.shaded.io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:635) ~[neo4j-java-driver-4.0.0.jar:4.0.0-d03d93ede8ad65657eeb90ed890757203ecfaa7a]
at org.neo4j.driver.internal.shaded.io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:552) ~[neo4j-java-driver-4.0.0.jar:4.0.0-d03d93ede8ad65657eeb90ed890757203ecfaa7a]
at org.neo4j.driver.internal.shaded.io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:514) ~[neo4j-java-driver-4.0.0.jar:4.0.0-d03d93ede8ad65657eeb90ed890757203ecfaa7a]
at org.neo4j.driver.internal.shaded.io.netty.util.concurrent.SingleThreadEventExecutor$6.run(SingleThreadEventExecutor.java:1044) ~[neo4j-java-driver-4.0.0.jar:4.0.0-d03d93ede8ad65657eeb90ed890757203ecfaa7a]
at org.neo4j.driver.internal.shaded.io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[neo4j-java-driver-4.0.0.jar:4.0.0-d03d93ede8ad65657eeb90ed890757203ecfaa7a]
at org.neo4j.driver.internal.shaded.io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[neo4j-java-driver-4.0.0.jar:4.0.0-d03d93ede8ad65657eeb90ed890757203ecfaa7a]
at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0-262]
Caused by: org.neo4j.driver.internal.shaded.io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information: localhost/127.0.0.1:7687
Caused by: java.net.ConnectException: Connection refused: no further information
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[na:1.8.0-262]
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:714) ~[na:1.8.0-262]
at org.neo4j.driver.internal.shaded.io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:327) ~[neo4j-java-driver-4.0.0.jar:4.0.0-d03d93ede8ad65657eeb90ed890757203ecfaa7a]
at org.neo4j.driver.internal.shaded.io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:334) ~[neo4j-java-driver-4.0.0.jar:4.0.0-d03d93ede8ad65657eeb90ed890757203ecfaa7a]
at org.neo4j.driver.internal.shaded.io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:688) ~[neo4j-java-driver-4.0.0.jar:4.0.0-d03d93ede8ad65657eeb90ed890757203ecfaa7a]
at org.neo4j.driver.internal.shaded.io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:635) ~[neo4j-java-driver-4.0.0.jar:4.0.0-d03d93ede8ad65657eeb90ed890757203ecfaa7a]
at org.neo4j.driver.internal.shaded.io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:552) ~[neo4j-java-driver-4.0.0.jar:4.0.0-d03d93ede8ad65657eeb90ed890757203ecfaa7a]
at org.neo4j.driver.internal.shaded.io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:514) ~[neo4j-java-driver-4.0.0.jar:4.0.0-d03d93ede8ad65657eeb90ed890757203ecfaa7a]
at org.neo4j.driver.internal.shaded.io.netty.util.concurrent.SingleThreadEventExecutor$6.run(SingleThreadEventExecutor.java:1044) ~[neo4j-java-driver-4.0.0.jar:4.0.0-d03d93ede8ad65657eeb90ed890757203ecfaa7a]
at org.neo4j.driver.internal.shaded.io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[neo4j-java-driver-4.0.0.jar:4.0.0-d03d93ede8ad65657eeb90ed890757203ecfaa7a]
at org.neo4j.driver.internal.shaded.io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[neo4j-java-driver-4.0.0.jar:4.0.0-d03d93ede8ad65657eeb90ed890757203ecfaa7a]
at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0-262]
2021-06-04 13:27:32.918 INFO 6188 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor'
有谁知道它为什么不运行?
解决方案
推荐阅读
- python - 如何在一行代码中将多个更新组合到一个 numpy 数组?
- google-apps-script - X 最近列条目的自动平均
- vue.js - 如何在 vue.js 中使用 konva 获取价值
- flutter - 让 Emoji 在文本中变大?
- r - 是否可以使用 t.test() 函数更改 I 类错误阈值?
- java - java中httpservletresponse的getoutputstream方法在哪里?
- python - 无法定位元素 XPath (Selenium)
- python - 舍入熊猫中的特定列(python)
- java - Test Unit Controller Rest Pageable
- javascript - 如何单击弹出窗口数据内容内的链接?