2016-08-03 8 views
1

Ich versuche, mysql-Datenbank mit Spring-Boot-Web-Service zu verbinden, aber ich habe diesen Fehler und ich weiß nicht, wie Sie es beheben. .org.springframework.beans.factory.UnsatisfiedDependencyException: Fehler beim Erstellen Bean mit Namen userController: Unzufriedene Abhängigkeit

mein Controller ist:

@RestController 
    @RequestMapping("/user") 
    public class UsersController { 

    @Autowired 
    UserService userService; 

    @RequestMapping("/test") 
    @ResponseBody 
    String home(){ 
     return "Hello world"; 
    } 

    @RequestMapping("/users") 
    String test(){ 
     return "TEST "; 
    } 
} 

und meine Entity ist:

@Entity 
public class User { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private int id; 

    private String username; 
    private String name; 
    private String firstname; 
    private String email; 
    private String adress; 
    private String password; 

    // Constructeur pour l'utilisation des JPA 
    protected User(){} 

    public User(String username, String name, String firstname, String email, String adress, String password) { 
     this.username = username; 
     this.name = name; 
     this.firstname = firstname; 
     this.email = email; 
     this.adress = adress; 
     this.password = password; 
    } 

    public int getId() { 
     return id; 
    } 

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

    public String getUsername() { 
     return username; 
    } 

    public void setUsername(String username) { 
     this.username = username; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getFirstname() { 
     return firstname; 
    } 

    public void setFirstname(String firstname) { 
     this.firstname = firstname; 
    } 

    public String getEmail() { 
     return email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 

    public String getAdress() { 
     return adress; 
    } 

    public void setAdress(String adress) { 
     this.adress = adress; 
    } 

    public String getPassword() { 
     return password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 
} 

Meine Repository-Datei:

public interface UserRepository extends CrudRepository<User, Integer>{ 
    List<User> findUserByName(String name); 
    User findUserByUsername(String username); 
} 

Mein Service:

@Service 
@Component 
public class UserService { 
    @Autowired 
    private UserRepository repoUser; 

    public List<User> getUser(String name){ 
     return repoUser.findUserByName(name); 
    } 
} 

EDIT: Das ist mein Stack Trace:

2016-08-05 20:48:39.025 WARN 1849 --- [   main] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'usersController': Unsatisfied dependency expressed through field 'userService': No qualifying bean of type [services.UserService] found for dependency [services.UserService]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [services.UserService] found for dependency [services.UserService]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
2016-08-05 20:48:39.026 INFO 1849 --- [   main] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default' 
2016-08-05 20:48:39.031 INFO 1849 --- [   main] o.apache.catalina.core.StandardService : Stopping service Tomcat 
2016-08-05 20:48:39.053 INFO 1849 --- [   main] utoConfigurationReportLoggingInitializer : 

Error starting ApplicationContext. To display the auto-configuration report enable debug logging (start with --debug) 


2016-08-05 20:48:39.073 ERROR 1849 --- [   main] o.s.boot.SpringApplication    : Application startup failed 

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'usersController': Unsatisfied dependency expressed through field 'userService': No qualifying bean of type [services.UserService] found for dependency [services.UserService]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [services.UserService] found for dependency [services.UserService]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:569) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:349) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:776) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:861) ~[spring-context-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541) ~[spring-context-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) ~[spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) [spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:369) [spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:313) [spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1185) [spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1174) [spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
    at com.example.JitBackofficeApplication.main(JitBackofficeApplication.java:13) [classes/:na] 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_101] 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_101] 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_101] 
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_101] 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) [idea_rt.jar:na] 
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [services.UserService] found for dependency [services.UserService]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1406) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1057) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1019) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:566) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE] 
    ... 24 common frames omitted 

Mein aplication.properties:

spring.datasource.url=jdbc:mysql://localhost/jitdatabase 
spring.datasource.username=root 
spring.datasource.password=root 
spring.datasource.driver-class-name=com.mysql.jdbc.Driver 
spring.data.jpa.repositories.enabled=true 

Hier meine Anwendungsdatei:

import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 
import org.springframework.context.annotation.ComponentScan; 

@SpringBootApplication 
@ComponentScan("controllers") 
public class JitBackofficeApplication { 

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

here theres is my architecture

Wer eine Lösung?

Grüße

+0

Wo ist der Fehler, den Sie bekommen haben? – andre3wap

+0

Der Fehler ist auf usercontroller, weil ich autowired userService:/ – tchekroun

+0

Welche Pakete sind Ihre Klassen in? –

Antwort

2

Ihre @ComponentScan Annotation ist falsch. Sie fügen das Controller-Paket nur als Komponentenquelle hinzu.

Sie müssen das Paket hinzufügen, das sowohl Ihre Controller als auch die Services enthält.

ZB wenn Ihre Paketstruktur ist:

com.mycompany.controllers

com.mycompany.Dienstleistungen

Dann schreiben com.mycompany in die @ComponentScan.

Außerdem sollten Sie nur @Service für Ihre Serviceklassen verwenden und nicht @Component.

+0

Was sollte Weiß und meine KomponenteScan? – tchekroun

+1

Vielen Dank für Ihre Hilfe! – tchekroun

0

ich vor, dieses Problem habe ich es verfolgen und festgestellt, dass dies nicht der Fehler der Steuerung und Service, aber die repository.I bekam dies durch den Ausnahme-Stack ‚, verursacht durch xxx'.Finally ich gefunden Der Grund, ich habe einen Fehler gemacht, wenn ich die Datenquelle in application.properties konfiguriere, die zu einem Fehler beim Verbinden der Datenbank führen.

Aber Ihr Fehler ist unvollständig.Ich denke, Ihr Fehler ist wie meins und ich habe eine Frage zu bestätigen.

1.Können Sie Ihren kompletten Ausnahme-Stack anzeigen?

2.Können Sie Ihre application.properties anzeigen?

3. Stellen Sie sicher, dass Ihre Datenbank erfolgreich verbunden werden kann.Sie können jdbc zum Testen verwenden.

4. Haben Sie eine Datenquelle oder mehr? Mehr als eine Datenquelle wird die Konfiguration komplexer machen und eine größere Fehlerwahrscheinlichkeit haben.

+0

Ich bearbeite meine Frage, meine Datenbank funktioniert und ich verstehe immer noch nicht, warum mein Web-Service nicht funktioniert ... Ich denke, das Problem ist über meine Entität oder Repository – tchekroun

+0

Saw Ihre Ausnahme Stack, ich denke, es ist, weil die @ComponentScan tut scannen Sie Ihren Dienst nicht.Können Sie Ihre JitBackofficeApplication-Klasse anzeigen.Oder stellen Sie sicher, dass Ihr ComponentScan richtig konfiguriert ist? Der folgende Code gehört mir: @ComponentScan ("boot.web, boot.service, boot.repository, boot.app") und meine Verzeichnisstruktur folgt: src/main/ -----boot.app -----------App.java ----- boot.domain - ---- boot.repository ----- boot.service ----- bo ot.web App.java ist meine Startup-Klasse. –

+0

Ich habe gerade meine Post bearbeiten (wieder ..) Ich hatte ein Bild, um meine Architektur zu sehen, aber ich verstehe nicht wirklich das componentScan ... – tchekroun

Verwandte Themen