2016-03-21 6 views
1

Ich versuche, dieses Beispiel auszuführen: https://spring.io/guides/gs/accessing-data-neo4j/ Ich benutze Maven als Build-Tool. Ich bekomme Fehler wie folgt:neo4j: Kein qualifizierendes Bean des Typs gefunden für die Abhängigkeit

[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.3.3.RELEASE:run (default-cli) on project gs-accessing-data-neo4j: An exception occurred while running. null: InvocationTargetException: Error creating bean with name 'demo' defined in hello.Application: Unsatisfied dependency expressed through constructor argument with index 0 of type [hello.PersonRepository]: No qualifying bean of type [hello.PersonRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [hello.PersonRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {} -> [Help 1] 

Was ist das Problem?

Das ist mein PersonRepository.java Datei:

package hello; 

import java.util.List; 
import org.springframework.data.neo4j.config.EnableNeo4jRepositories; 

import org.springframework.data.repository.CrudRepository; 

@EnableNeo4jRepositories(basePackageClasses=CrudRepository.class) 
public interface PersonRepository extends CrudRepository<Person, String> 
{ 

    Person findByName(String name); 

    List<Person> findByTeammatesName(String name); 

} 

Antwort

1

Wenn Sie das Tutorial sorgfältig zu lesen, werden Sie sehen:

In der Konfiguration, müssen Sie auch die @EnableNeo4jRepositories Anmerkung hinzufügen wie erweitern Sie die Neo4jConfiguration Klasse, um benötigte Komponenten bequem hochzufahren.

Standardmäßig scannt @EnableNeo4jRepositories das aktuelle Paket nach Schnittstellen, die eine der Repository-Schnittstellen von Spring Data erweitern. Verwenden Sie die Datei basePackageClasses=MyRepository.class, um Spring Data GemFire ​​zu veranlassen, ein anderes Root-Paket nach Typ zu durchsuchen, wenn Ihr Projektlayout mehrere Projekte enthält und Ihre Repositorys nicht gefunden werden.

Ein Stück, das fehlt, ist die Graph-Datenbank-Service-Bean. In diesem Fall verwenden Sie die Datei EmbeddedGraphDatabase, die einen dateibasierten Datenspeicher unter accessingdataneo4j.db erstellt und erneut verwendet.

Als solche müssen Sie eine Klasse schreiben, die die Konfiguration der Sprint Boot-Anwendung hinzufügt. Nennen wir es ApplicationConfig.java. Indienststellung Code, was das Tutorial zu sagen ist, kommen wir oben mit: richtig

package hello; 

import org.neo4j.graphdb.GraphDatabaseService; 
import org.neo4j.graphdb.factory.GraphDatabaseFactory; 

import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.data.neo4j.config.EnableNeo4jRepositories; 
import org.springframework.data.neo4j.config.Neo4jConfiguration; 

@Configuration 
@EnableNeo4jRepositories 
class ApplicationConfig extends Neo4jConfiguration { 

    public ApplicationConfig() { 
     setBasePackage("hello"); 
    } 

    @Bean 
    GraphDatabaseService graphDatabaseService() { 
     return new GraphDatabaseFactory().newEmbeddedDatabase("accessingdataneo4j.db"); 
    } 
} 

Wenn Sie diese Klasse zu Ihrem hello Paket hinzufügen, führen Sie die Anwendung.

Beachten Sie, dass die PersonRepository halten sollte, wie es in der Anleitung definiert, die wie folgt lautet:

package hello; 

import java.util.List; 

import org.springframework.data.repository.CrudRepository; 

public interface PersonRepository extends CrudRepository<Person, String> { 

    Person findByName(String name); 

    List<Person> findByTeammatesName(String name); 

} 

Als Nebennote, können Sie den vollständigen Code auf der Spring GitHub repo sehen .

Verwandte Themen