Ich verwende spring boot
und MongoDB
.
Spring version : 4.3.9
Spring boot version : 1.5.4
Ich erstelle ein Repository, das wie unten MongoRepository
interface
implementiert
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface HotelRepository extends MongoRepository<Hotel,String> {
}
Wenn ich jedoch eine Abhängigkeit zum HotelRepository-Compiler hinzufüge, wird der Fehler Field hotelRepository in com.demo.HotelController required a bean of type 'com.demo.HotelRepository' that could not be found.
ausgegeben.
@RestController
@RequestMapping("/hotel")
public class HotelController {
@Autowired
private HotelRepository hotelRepository;
@GetMapping("/all")
public List<Hotel> getAllHotels(){
return this.hotelRepository.findAll();
}
}
Ich habe alle Aspekte von meiner Seite untersucht, um den Fehler zu beheben, aber alles umsonst. Was habe ich R & D?.
HotelRepository
wird standardmäßig eine Standardimplementierung bereitgestellt. wie im Frühjahr dokumentiert@Repository
kommentiert, daher muss @Component
nicht eingegeben werden.@Autowired
-Annotation. Es sollte also die erstellte Bean aus dem Federkontext ausgewählt werden.@ComponentScan
nicht eingegeben werden.Hier ist meine Hauptklasse für Spring Boot-Anwendungen:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MongoWithBootApplication {
public static void main(String[] args) {
SpringApplication.run(MongoWithBootApplication.class, args);
}
}
application.properties:
spring.data.mongodb.Host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=HotelDB
Stack-Trace :
2017-07-10 13:25:12.485 INFO 4712 --- [ main] com.demo.MongoWithBootApplication : Starting MongoWithBootApplication on KELLGGNCPU0313 with PID 4712 (D:\STS_WS\MongoWithBoot\target\classes started by mehrajuddin.malik in D:\STS_WS\MongoWithBoot)
2017-07-10 13:25:12.487 INFO 4712 --- [ main] com.demo.MongoWithBootApplication : No active profile set, falling back to default profiles: default
2017-07-10 13:25:12.519 INFO 4712 --- [ main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot[email protected]13acb0d1: startup date [Mon Jul 10 13:25:12 IST 2017]; root of context hierarchy
2017-07-10 13:25:13.448 INFO 4712 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
2017-07-10 13:25:13.456 INFO 4712 --- [ main] o.Apache.catalina.core.StandardService : Starting service [Tomcat]
2017-07-10 13:25:13.456 INFO 4712 --- [ main] org.Apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.5.15
2017-07-10 13:25:13.541 INFO 4712 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2017-07-10 13:25:13.541 INFO 4712 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1025 ms
2017-07-10 13:25:13.635 INFO 4712 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]
2017-07-10 13:25:13.637 INFO 4712 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*]
2017-07-10 13:25:13.638 INFO 4712 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2017-07-10 13:25:13.638 INFO 4712 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2017-07-10 13:25:13.638 INFO 4712 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*]
2017-07-10 13:25:13.673 WARN 4712 --- [ main] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'hotelController': Unsatisfied dependency expressed through field 'hotelRepository'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.demo.HotelRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
2017-07-10 13:25:13.675 INFO 4712 --- [ main] o.Apache.catalina.core.StandardService : Stopping service [Tomcat]
2017-07-10 13:25:13.684 INFO 4712 --- [ main] utoConfigurationReportLoggingInitializer :
Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
2017-07-10 13:25:13.737 ERROR 4712 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter :
***************************
APPLICATION FAILED TO START
***************************
Description:
Field hotelRepository in com.demo.HotelController required a bean of type 'com.demo.HotelRepository' that could not be found.
Action:
Consider defining a bean of type 'com.demo.HotelRepository' in your configuration.
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.demo</groupId>
<artifactId>MongoWithBoot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>MongoWithBoot</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.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.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>
Könnte mir bitte jemand hier helfen, was fehlt mir?
Nach so viel Mühe habe ich das Problem endlich gelöst.
Im Code oder in der Anmerkung ist nichts falsch. Das Problem war die Version von Spring Boot .
Ich bin jedoch immer noch nicht sicher, was in der obigen Version falsch ist 1.5.1.RELEASE
. Wenn jemand weiß, dass die Hauptursache die Frage bearbeiten oder beantworten kann.
Problem : Wenn ich spring-boot-starter-parent
oberhalb von 1.5.1.RELEASE
hinzufüge, wird der obige Fehler für MongoRepository
angezeigt. Es gibt einen Fehler von 1.5.2
bis 1.5.4
Version. (1.5.4
war die letzte Version, bis ich den No-Bean-Fehler ausprobiert habe)
Lösung : Es läuft gut, wenn ich spring-boot-starter-parent
1.5.1.RELEASE
oder darunter hinzufüge (1.5.0
war die niedrigste Version, bis ich es versucht habe).
Ähnlichem Problem begegnete ich durch das Hinzufügen des Folgenden zur Application-Klasse beim Lösen des Problems
@EnableMongoRepositories(basePackageClasses = DeviceDataRepository.class)
In Ihrem Fall könnte es sein
@SpringBootApplication
@EnableMongoRepositories(basePackageClasses = HotelRepository.class)
public class MongoWithBootApplication{ ... }
Ich hatte das gleiche Problem
Wird unter dem Code zum Scannen von Mongorepository-Paketen verwendet
@SpringBootApplication
@EnableMongoRepositories(basePackages = {"//packages you want to scan for activiting mongo repositories"})
public class SpringBootMongoDBApp{ ... }
Es hat mein Problem gelöst
wir müssen Mongo-Repositories mit EnableMongoRepositories
aktivieren.
@SpringBootApplication
@EnableMongoRepositories //specify packages to scan
public class MongoWithBootApplication{ ... }
Ich habe die gleiche Struktur und musste nur diese Konfiguration hinzufügen:
Application.Java
@Configuration
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
...
}
application.properties
spring.data.mongodb.uri=mongodb://localhost:27017/hotelDB
Das Repository-Paket muss sich in einer tieferen Ebene der Application.Java-Klasse befinden. Das ist alles
com.hotelDB
Application.Java
repository (Package)
controller (Package)
service (Package)
...
Habe gerade versucht und habe mit meinem vorhandenen Springboot mongodb-Projekt mit 1.5.4.RELEASE
für spring-boot-starter-parent
überhaupt kein Problem gefunden.
Früher wurde es mit 1.4.0.RELEASE
konfiguriert.