J'utilise spring boot
et MongoDB
.
Spring version : 4.3.9
Spring boot version : 1.5.4
Je crée un référentiel qui implémente MongoRepository
interface
, comme ci-dessous
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface HotelRepository extends MongoRepository<Hotel,String> {
}
Mais chaque fois que j'ajoute une dépendance au compilateur HotelRepository en donnant l'erreur Field hotelRepository in com.demo.HotelController required a bean of type 'com.demo.HotelRepository' that could not be found.
@RestController
@RequestMapping("/hotel")
public class HotelController {
@Autowired
private HotelRepository hotelRepository;
@GetMapping("/all")
public List<Hotel> getAllHotels(){
return this.hotelRepository.findAll();
}
}
J'ai examiné tous les aspects de mon côté pour résoudre l'erreur, mais en vain. Qu'est-ce que j'ai R & D.
HotelRepository
, une implémentation par défaut sera fournie immédiatement. selon les documents de printemps@Repository
, donc pas besoin de mettre @Component
@Autowired
. Il convient donc de sélectionner le bean créé dans le contexte de printemps.@ComponentScan
Voici ma principale classe d'applications de démarrage de printemps:
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
Trace de la pile :
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.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@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>
Quelqu'un pourrait-il m'aider s'il vous plaît ce qui me manque?
Après tant de difficultés, j'ai finalement résolu le problème.
Il n'y a rien de mal dans le code ou l'annotation. Le problème était la version de printemps boot .
Cependant, je ne suis toujours pas sûr de ce qui ne va pas dans la version ci-dessus 1.5.1.RELEASE
. Si quelqu'un sait que la cause fondamentale peut modifier ou répondre à la question.
Problème : Si j'ajoute spring-boot-starter-parent
au-dessus de 1.5.1.RELEASE
, cela me donne l'erreur ci-dessus sans bean pour MongoRepository
. Il donne une erreur de 1.5.2
à 1.5.4
version. (1.5.4
était la dernière version jusqu'à ce que j'ai essayé de faire face à l'erreur sans bean)
Solution : Cela fonctionne bien si j'ajoute spring-boot-starter-parent
1.5.1.RELEASE
ou inférieur (1.5.0
était la version la plus basse jusqu'à ce que j'aie essayé).
Face à un problème similaire, l’ajout de ce qui suit à la classe d’application m’a aidé à résoudre le problème
@EnableMongoRepositories(basePackageClasses = DeviceDataRepository.class)
Dans votre cas, il pourrait être
@SpringBootApplication
@EnableMongoRepositories(basePackageClasses = HotelRepository.class)
public class MongoWithBootApplication{ ... }
Je faisais face au même problème
Utilisé ci-dessous le code pour analyser les paquets mongorepository
@SpringBootApplication
@EnableMongoRepositories(basePackages = {"//packages you want to scan for activiting mongo repositories"})
public class SpringBootMongoDBApp{ ... }
Ça a résolu mon problème
nous devons activer les dépôts mongo en utilisant EnableMongoRepositories
@SpringBootApplication
@EnableMongoRepositories //specify packages to scan
public class MongoWithBootApplication{ ... }
J'ai la même structure et il me suffisait d'ajouter cette configuration:
Application.Java
@Configuration
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
...
}
application.properties
spring.data.mongodb.uri=mongodb://localhost:27017/hotelDB
Et le package de référentiel doit être dans un niveau plus profond de la classe Application.Java. C'est tout
com.hotelDB
Application.Java
repository (Package)
controller (Package)
service (Package)
...
J'ai juste essayé et je n'ai trouvé aucun problème avec mon projet mongodb de démarrage initial existant avec 1.5.4.RELEASE
pour spring-boot-starter-parent
.
Auparavant, il était configuré avec 1.4.0.RELEASE
.