无法将Spring Boot Data与Neo4j集成

时间:2016-06-02 03:06:07

标签: spring neo4j spring-boot spring-data

我刚开始使用Spring Boot Data Neo4j并尝试完成电影教程。我得到了这个ERROR但不确定如何调试。错误摘要:(1)创建bean时出错(2)无法自动装配字段。任何帮助,谢谢。

我的文件结构如下:

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 {
	
	@Autowired
	MovieService movieService;

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




Movie.java



package com.test.movie;

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

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

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

	public Long getId() {
		return id;
	}

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

	public String getTitle() {
		return title;
	}

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

	public int getReleased() {
		return released;
	}

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

	public String getTagline() {
		return tagline;
	}

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




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 {	
	
	@Autowired
	MovieRepository movieRepository;

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

}




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> {
	
	Movie findById(long id);
	
	Movie findByTitle(@Param("title") String title);

	@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);

}
&#13;
&#13;
&#13;

MyNeo4jConfiguration.java

&#13;
&#13;
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 {

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

}
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

您遇到自动接线问题:MovieService上的注释错误,应该是:

@Service("movieService")

或只是

@Service

您正在尝试使用大写名称注入bean,并且上下文无法找到它(注入是通过名称完成的)。另一种解决方案是在自动有线字段上使用@Qualifier注释,例如

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