春季靴子(和春天)的新手。
我有这个简单的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.
项目结构。
这是我的课程
@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>
答案 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。