2016-06-02 18 views
0

Ich habe gerade mit Spring Boot Data Neo4j begonnen und versucht, das Film-Tutorial zu beenden. Ich habe diese ERROR aber nicht wirklich sicher, wie man debuggt. Fehlerzusammenfassung: (1) Fehler beim Erstellen von Bean (2) Feld konnte nicht automatisch gestartet werden. Jede Hilfe, danke.Spring Boot Data kann nicht mit Neo4j integriert werden

Struktur Meine Dateien wie folgt:

SpringBootApplication.java

package com.test.springdataneothree; 
 

 
import org.springframework.beans.factory.annotation.Autowired; 
 
import org.springframework.boot.CommandLineRunner; 
 
import org.springframework.boot.SpringApplication; 
 
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 
 
import org.springframework.boot.autoconfigure.SpringBootApplication; 
 

 
import com.test.services.MovieService; 
 

 
@EnableAutoConfiguration 
 
@SpringBootApplication 
 
public class SpringdataneothreeApplication implements CommandLineRunner { 
 
\t 
 
\t @Autowired 
 
\t MovieService movieService; 
 

 
\t public static void main(String[] args) { 
 
\t \t SpringApplication.run(SpringdataneothreeApplication.class, args); 
 
\t } 
 
\t 
 
\t @Override 
 
\t public void run(String... arg0) throws Exception { 
 
\t \t System.out.println("Main Spring Boot Class"); 
 
\t \t movieService.countMovie(); 
 
\t } 
 
}

Movie.java

package com.test.movie; 
 

 
import org.neo4j.ogm.annotation.GraphId; 
 
import org.neo4j.ogm.annotation.NodeEntity; 
 

 
@NodeEntity(label ="Movie") 
 
public class Movie { 
 

 
\t @GraphId 
 
    private Long id; 
 
\t 
 
\t String title; 
 
    int released; 
 
    String tagline; 
 
    
 
    
 
    public Movie() { } 
 

 
\t public Long getId() { 
 
\t \t return id; 
 
\t } 
 

 
\t public void setId(Long id) { 
 
\t \t this.id = id; 
 
\t } 
 

 
\t public String getTitle() { 
 
\t \t return title; 
 
\t } 
 

 
\t public void setTitle(String title) { 
 
\t \t this.title = title; 
 
\t } 
 

 
\t public int getReleased() { 
 
\t \t return released; 
 
\t } 
 

 
\t public void setReleased(int released) { 
 
\t \t this.released = released; 
 
\t } 
 

 
\t public String getTagline() { 
 
\t \t return tagline; 
 
\t } 
 

 
\t public void setTagline(String tagline) { 
 
\t \t this.tagline = tagline; 
 
\t } 
 
    
 
}

MovieService.java

package com.test.services; 
 

 
import org.springframework.beans.factory.annotation.Autowired; 
 
import org.springframework.stereotype.Service; 
 

 
import com.test.repositories.MovieRepository; 
 

 
@Service("MovieService") 
 
public class MovieService { \t 
 
\t 
 
\t @Autowired 
 
\t MovieRepository movieRepository; 
 

 
\t public void countMovie() { 
 
\t \t movieRepository.count(); 
 
\t \t 
 
\t } 
 

 
}

MovieRepository.java

package com.test.repositories; 
 

 
import java.util.Collection; 
 
import java.util.List; 
 
import java.util.Map; 
 

 
import org.springframework.data.neo4j.annotation.Query; 
 
import org.springframework.data.neo4j.repository.GraphRepository; 
 
import org.springframework.data.repository.query.Param; 
 
import org.springframework.stereotype.Repository; 
 

 
import com.test.movie.Movie; 
 

 
@Repository 
 
public interface MovieRepository extends GraphRepository<Movie> { 
 
\t 
 
\t Movie findById(long id); 
 
\t 
 
\t Movie findByTitle(@Param("title") String title); 
 

 
\t @Query("MATCH (m:Movie) WHERE m.title =~ ('(?i).*'+{title}+'.*') RETURN m") 
 
    Collection<Movie> findByTitleContaining(@Param("title") String title); 
 

 
    @Query("MATCH (m:Movie)<-[:ACTED_IN]-(a:Person) RETURN m.title as movie, collect(a.name) as cast LIMIT {limit}") 
 
    List<Map<String,Object>> graph(@Param("limit") int limit); 
 

 
}

MyNeo4jConfiguration.java

package com.test.configuration; 
 

 
import org.neo4j.ogm.session.SessionFactory; 
 
import org.springframework.context.annotation.ComponentScan; 
 
import org.springframework.context.annotation.Configuration; 
 
import org.springframework.data.neo4j.config.Neo4jConfiguration; 
 
import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories; 
 
import org.springframework.scheduling.annotation.EnableScheduling; 
 
import org.springframework.transaction.annotation.EnableTransactionManagement; 
 

 
@EnableTransactionManagement 
 
@EnableScheduling 
 
@ComponentScan(basePackages = {"com.test"}) 
 
@Configuration 
 
@EnableNeo4jRepositories(basePackages = "com.test.repositories") 
 
public class MyNeo4jConfiguration extends Neo4jConfiguration { 
 

 
\t @Override 
 
\t public SessionFactory getSessionFactory() { 
 
\t \t return new SessionFactory("com.test.movie"); 
 
\t } 
 

 
}

+0

https://github.com/neo4j-examples/sdn4-university ist ein Beispiel mit der neuen Feder-boot-Starter für SDN – Luanne

Antwort

0

Sie ein Problem mit Auto-Verkabelung haben: die Anmerkung auf der MovieService falsch ist, sollte es sein:

@Service("movieService") 

oder nur

@Service 

Sie versuchen, eine Bohne mit dem aktivierten Namen zu injizieren, und der Kontext es nicht finden kann (die Injektion von Namen getan). Eine andere Lösung ist es, die @Qualifier Anmerkung auf der Auto verdrahtet Feld zu verwenden, wie

@Autowired 
@Qualifier("MovieService") 
MovieService movieService; 
Verwandte Themen