web-dev-qa-db-fra.com

Spring Boot et @ComponentScan entre deux bocaux

J'ai 2 projets. L'un est un projet DAL qui effectue des opérations CRUD sur une base de données neo4j en utilisant des API neo4j à ressort. Ce projet est présenté dans un bocal et inclus dans le projet # 2. Le projet n ° 2 est un projet Spring restful services qui utilise Spring Boot pour empaqueter et créer un fichier exécutable qui s'exécute sur un serveur Tomcat intégré.

Lorsque j'essaie d'exécuter mon fichier exécutable créé par Spring Boot pour moi, je reçois toujours cette exception. attendait au moins 1 bean qui se qualifie comme candidat autowire pour cette dépendance. Annotations de dépendance: {@ org.springframework.beans.factory.annotation.Autowired (required = true)}

Sur la base de ma lecture, si j'utilise @ComponentScan, je peux donner les répertoires d'annotations à regarder. Je lui donne donc le répertoire de base pour mon projet de services. Et je lui donne le répertoire de base pour mon DAL.jar inclus mais toujours pas de chance voici à quoi ressemble l'annotation.

Extrait des commentaires:

Déclaration d'analyse des composants

@ComponentScan({"com.foo.dal.*","com.foo.notification.*"})

Trace de la pile:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pushCommandsController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.teradata.dal.example.PushRepository com.teradata.notification.rest.controller.PushCommandsController.repository; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.teradata.dal.example.PushRepository] found for dependency:
expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

MISE À JOUR:

basé sur la réponse @chrylis: modification de @ComponenetScan

@ComponentScan({"com.teradata.notification","com.teradata.dal"})

courir vers:

Java.lang.reflect.InvocationTargetException
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:57)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
at Java.lang.reflect.Method.invoke(Method.Java:606)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.Java:53)
at Java.lang.Thread.run(Thread.Java:744)
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'org.springframework.boot.autoconfigure.MessageSourceAutoConfiguration' is defined

PLUS DE DÉTAILS SUR LE PROJET DAL ET LE PROJET SERVICE:

PROJET DAL:

DAL project structure


DAL classes


DAL classes


DAL classes


DAL classes


Projet de services:

Service project structure


Service classes


Service classes


Service classes

17
Muhi Masoud

L'argument de @ComponentScan est un nom de package et ces chaînes ne sont pas des packages valides. Jeter le .* d'eux; Spring analyse automatiquement les sous-packages.

19
chrylis

J'ai eu ce même problème pendant un court moment, puis @EntityScan a fait l'affaire pour moi, comme conseillé ici - Spring Boot w/JPA: déplacez @Entity vers un package différent .

J'espère que cela pourra aider

2
Tomek Samcik