考虑在配置

时间:2018-01-13 13:20:59

标签: java spring mongodb spring-boot

春季靴子(和春天)的新手。

我有这个简单的Spring启动项目,我正在尝试连接到远程服务器上的MongoDB。 运行应用程序时,我有以下消息。

Description:

Parameter 0 of constructor in com.mongotest.demo.Seeder required a bean of type 'com.mongotest.repositories.StudentRepository' that could not be found.


Action:

Consider defining a bean of type 'com.mongotest.repositories.StudentRepository' in your configuration.

项目结构。

enter image description here

这是我的课程

@Document(collection = "Students")
public class Student {
	
	@Id
	private String number;
	private String name;
	@Indexed(direction = IndexDirection.ASCENDING)
	private int classNo;

//Constructor and getters and setters.
}

================================

@Repository
public interface StudentRepository extends MongoRepository<Student, String>{

}

================================

@Component
@ComponentScan({"com.mongotest.repositories"})
public class Seeder implements CommandLineRunner{

	private StudentRepository studentRepo;
	
	public Seeder(StudentRepository studentRepo) {
		super();
		this.studentRepo = studentRepo;
	}

	@Override
	public void run(String... args) throws Exception {
		// TODO Auto-generated method stub

		Student s1 = new Student("1","Tom",1);
		Student s2 = new Student("2","Jerry",1);
		Student s3 = new Student("3","Kat",2);
		studentRepo.deleteAll();
		studentRepo.save(Arrays.asList(s1,s2,s3));
		
	}

}

================================

@SpringBootApplication
public class DemoApplication {
	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}
}

我认为我正在遵循本教程 https://www.youtube.com/watch?v=Hu-cyytqfp8

请帮我解决这个问题。 在此先感谢您的帮助!

的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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.mongotest</groupId>
	<artifactId>demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>demo</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.9.RELEASE</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.mongodb</groupId>
			<artifactId>mongo-java-driver</artifactId>
			<version>3.4.2</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-mongodb</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>


</project>

6 个答案:

答案 0 :(得分:3)

请在DemoApplication

中添加以下注释
@SpringBootApplication
@ComponentScan("com.mongotest") //to scan packages mentioned
@EnableMongoRepositories("com.mongotest") //to activate MongoDB repositories
public class DemoApplication { ... }

答案 1 :(得分:2)

如果您希望避免编写注释,只需将com.mongotest.entities包com.mongotest.demo.entities和com.mongotest.repositories更改为com.mongotest.demo.repositories

Spring Boot架构将负责休息。实际上,其他文件和包应该在DemoApplication.java的同一级别或更低级别。

答案 2 :(得分:1)

就我而言,我在使用mysql db时遇到相同的错误

使用 @EnableJpaRepositories

解决
@SpringBootApplication
@ComponentScan("com.example.repositories")//to scan repository files
@EntityScan("com.example.entities")
@EnableJpaRepositories("com.example.repositories")
public class EmployeeApplication implements CommandLineRunner{ ..}

答案 3 :(得分:0)

我有3个帮助器类RedisManager,JWTTokenCreator和JWTTokenReader,我需要将它们作为SessionService spring服务的依赖项传入构造函数。

@SpringBootApplication
@Configuration
public class AuthenticationServiceApplication {
  @Bean
  public SessionService sessionService(RedisManager redisManager, JWTTokenCreator tokenCreator, JWTTokenReader tokenReader) {
    return new SessionService(redisManager,tokenCreator,tokenReader);
  }

  @Bean
  public RedisManager redisManager() {
    return new RedisManager();
  }

  @Bean
  public JWTTokenCreator tokenCreator() {
    return new JWTTokenCreator();
  }

  @Bean
  public JWTTokenReader JWTTokenReader() {
    return new JWTTokenReader();
  }

  public static void main(String[] args) {
     SpringApplication.run(AuthenticationServiceApplication.class, args);
  }
}

服务类别如下

@Service
@Component
public class SessionService {
  @Autowired
  public SessionService(RedisManager redisManager, JWTTokenCreator 
      tokenCreator, JWTTokenReader tokenReader) {

      this.redisManager = redisManager;
      this.tokenCreator = tokenCreator;
      this.jwtTokenReader = tokenReader;

   }
}

答案 4 :(得分:0)

@Document(collection = "Students")
public class Student {
	
	@Id
	private String number;
	private String name;
	@Indexed(direction = IndexDirection.ASCENDING)
	private int classNo;

//Constructor and getters and setters.
}

================================

@Repository
public interface StudentRepository extends MongoRepository<Student, String>{

}

================================

@Component
@ComponentScan({"com.mongotest.repositories"})
public class Seeder implements CommandLineRunner{

	private StudentRepository studentRepo;
	
	public Seeder(StudentRepository studentRepo) {
		super();
		this.studentRepo = studentRepo;
	}

	@Override
	public void run(String... args) throws Exception {
		// TODO Auto-generated method stub

		Student s1 = new Student("1","Tom",1);
		Student s2 = new Student("2","Jerry",1);
		Student s3 = new Student("3","Kat",2);
		studentRepo.deleteAll();
		studentRepo.save(Arrays.asList(s1,s2,s3));
		
	}

}

================================

@SpringBootApplication
public class DemoApplication {
	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}
}

答案 5 :(得分:0)

这里的问题是您定义的注释。

@ComponentScan(“ com.mongotest”)

这将扫描项目结构'com.mongotest'下的所有相关软件包,并初始化所有子软件包类中的bean。