Envisager de définir un bean de type "package" dans votre configuration [Source Démarrage]
J'obtiens l'erreur suivante:
***************************
APPLICATION FAILED TO START
***************************
Description:
Parameter 0 of method setApplicant in webService.controller.RequestController required a bean of type 'com.service.applicant.Applicant' that could not be found.
Action:
Consider defining a bean of type 'com.service.applicant.Applicant' in your configuration.
Je n'ai jamais vu cette erreur avant mais c'est bizarre que l' @Autowire ne fonctionne pas. Voici la structure du projet:
Demandeur Interface
public interface Applicant {
TApplicant findBySSN(String ssn) throws ServletException;
void deleteByssn(String ssn) throws ServletException;
void createApplicant(TApplicant tApplicant) throws ServletException;
void updateApplicant(TApplicant tApplicant) throws ServletException;
List<TApplicant> getAllApplicants() throws ServletException;
}
ApplicantImpl
@Service
@Transactional
public class ApplicantImpl implements Applicant {
private static Log log = LogFactory.getLog(ApplicantImpl.class);
private TApplicantRepository applicantRepo;
@Override
public List<TApplicant> getAllApplicants() throws ServletException {
List<TApplicant> applicantList = applicantRepo.findAll();
return applicantList;
}
}
Maintenant je devrais être en mesure de simplement Autowire Candidat et être en mesure d'accéder, dans ce cas, toutefois, il ne fonctionne pas quand je l'appelle dans mon @RestController:
@RestController
public class RequestController extends LoggingAware {
private Applicant applicant;
@Autowired
public void setApplicant(Applicant applicant){
this.applicant = applicant;
}
@RequestMapping(value="/", method = RequestMethod.GET)
public String helloWorld() {
try {
List<TApplicant> applicantList = applicant.getAllApplicants();
for (TApplicant tApplicant : applicantList){
System.out.println("Name: "+tApplicant.getIndivName()+" SSN "+tApplicant.getIndSsn());
}
return "home";
}
catch (ServletException e) {
e.printStackTrace();
}
return "error";
}
}
------------------------Mise à JOUR 1-----------------------
J'ai ajouté
@SpringBootApplication
@ComponentScan("module-service")
public class WebServiceApplication extends SpringBootServletInitializer {
@Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(WebServiceApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(WebServiceApplication.class, args);
}
}
et l'erreur est allé loin, mais rien ne s'est passé. Cependant quand j'ai commenté tout ce qui concerne le Applicant
dans le RestController
avant d'ajouter @ComponentScan()
j'ai été en mesure de retourner une chaîne de la UI
, ce qui veut dire que mon RestController
travaillait, maintenant, elle est ignorée. Je laid Whitelabel Error Page
maintenant.
---------------------Mise à JOUR 2------------------------------
J'ai ajouté le module de base de la fève, c'était de se plaindre. Erreur de lit:
***************************
APPLICATION FAILED TO START
***************************
Description:
Parameter 0 of method setApplicantRepo in com.service.applicant.ApplicantImpl required a bean of type 'com.delivery.service.request.repository.TApplicantRepository' that could not be found.
Action:
Consider defining a bean of type 'com.delivery.request.request.repository.TApplicantRepository' in your configuration.
J'ai ajouté @ComponentScan
@SpringBootApplication
@ComponentScan({"com.delivery.service","com.delivery.request"})
public class WebServiceApplication extends SpringBootServletInitializer {
@Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(WebServiceApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(WebServiceApplication.class, args);
}
}
----------------------------Mise à jour 3----------------------
ajoutant:
@SpringBootApplication
@ComponentScan("com")
public class WebServiceApplication extends SpringBootServletInitializer {
est toujours à se plaindre de mes ApplicantImpl
classe qui @Autowires
mon repo TApplicantRepository
en elle.
- Où en est votre demande de fichier de contexte? Si vous n'en avez pas, vous devriez envisager de donner le Printemps quelques allusions à des annotations comme @ComponentScan à faire tous les haricots disponibles.
- consultez la mise à jour 1
- Je suppose après chaque mise à jour il y a eu des changements dans les erreurs? Si possible, faire publier votre projet de la structure, et les journaux d'erreurs/stacktrace dans chaque cas.. c'est mieux de savoir "Pourquoi" de ces erreur s'est produite, plutôt que d'un "quelque chose" fait disparaître l'erreur. Sera utile pour d'autres personnes qui viennent à travers une semblable question.
Vous devez vous connecter pour publier un commentaire.
Il pourrait être parce que le projet a été décomposé en différents modules.
@EntityScan
et@EnableJpaRepositories
avec le droit de noms de paquets a fonctionné pour moi.Votre Candidat la classe n'est pas numérisé, il me semble. Par défaut, tous les paquets commençant à la racine de la classe où vous avez mis
@SpringBootApplication
seront analysés.supposons que votre
main
classe "WebServiceApplication" est dans "com.service.something
", puis tous les composants qui relèvent de la "com.service.something
" est scanné, et "com.service.applicant
" ne seront pas analysés.Vous pouvez restructurer vos paquets tels que "WebServiceApplication", tombe sous un package racine et tous les autres composants devient une partie de ce package racine. Ou vous pouvez inclure
@SpringBootApplication(scanBasePackages={"com.service.something","com.service.application"})
etc, de sorte que "TOUS" les composants sont analysés et initialisé dans le ressort du conteneur.Mise à jour en fonction des commentaires
Si vous disposez de plusieurs modules qui sont gérés par maven/gradle, tous les printemps des besoins est le package d'analyse. Vous dites de printemps à la numérisation "com.module1" et vous avez un autre module qui a sa racine nom du package "com.module2", ces composants ne seront pas analysés. Vous pouvez même demander au printemps à l'analyse "com" qui va alors scanner tous les composants dans "
com.module1.
" et "com.module2.
"build.gradle
. Ceuxbuild.gradle
module de noms sont ajoutés à ladependencies
du module avec la méthode main. Par conséquent, lorsque vous vu@ComponentScan("module-service")
qu'est ce que je pensais serait de travailler. Cependant à l'intérieur demodule-service
a un paquet. Donc ma question à quoi cela ressemble? Dois-je juste le nom le nom du paquet ou le nom du module ou d'une autre manière à la fois?@SpringBootApplication(scanBasePackages= {"com.delivery.service","com.delivery.request"})
@SpringBootApplication(scanBasePackages= "com")
et c'est se plaindre de la JPA référentiel. Je vous remercie beaucoup. Je ne savais pas " printemps analyser tous les paquets qui commencent par "com" si vous faites le au-dessus.Il y a une chance...
Vous pourriez être absent
@Service
,@Repository
annotation sur votre mise en œuvre des classes.Fondamentalement ce qui se passe quand vous avez votre Application de Classe dans "un autre package". Par exemple:
- Je résoudre le problème dans le Application.class
Une autre, moins de manière élégante est de: mettre toutes les classes de configuration dans le même package.
@ComponentScan
dans le scénario ci-dessus. Parce que votreApplication.class
(qui a le@SpringBootApplication
annotation) est placé danscom.server
qui de toute façon est la racine pour les deuxcom.server.config
ainsi quecom.server.repository
.@EnableMongoRepositories
?Je pense que vous pouvez le faire simplifiée par annoté de votre dépôt avec @Référentiel, alors il sera activé automatiquement par le Framework Spring.
Cela peut aussi arriver si vous utilisez Lombok et vous ajoutez le
@RequiredArgsConstructor
et@NonNull
pour les champs, mais certains de vos champs ne sont pas à être injecté dans le constructeur. Ce n'est qu'une des possibilités pour obtenir la même erreur.Dans mon cas, l'erreur m'a dit que ce Contrôleur le problème était dans le, après le retrait de
@NonNull
le démarrage de l'application de l'amendeDans mon cas, j'ai eu une terrible erreur. J'ai mis
@Service
jusqu'à l'interface de service.Pour le fixer, j'ai mis
@Service
sur la mise en œuvre de fichier de service et il a travaillé pour moi.J'ai cherché en ligne pour une réponse, mais il semble qu'il n'y est pas une bonne solution pour mon cas:
Au tout début, tout fonctionne comme suit:
Alors je suis en train d'ajouter une carte mémoire cache quelque chose et ça devient:
Boom!
J'ai enlevé le
@AllArgsConstructor(onConstructor = @__(@Autowired))
et ajouter@Autowired
pour chaquerepository
etservice
à l'exception de laMap<String, String>
. Il fonctionne exactement comme avant.Espérons que cela pourrait être utile.
Dans mon cas, ces deux options travaillé.
dans
//@ComponentScan ({"myapp", "myapp.resources","myapp.services"})
inclure aussi le package qui détient le
Application.class
dans la liste, ouSimplement ajouter
@EnableAutoConfiguration
; il reconnaît automatiquement tous les beans spring.Cela peut se produire si le @classe de Service est marqué abstrait.
Si un bean est dans le même emballage dans lequel elle est @Autocâblés, alors il ne sera jamais la cause d'un tel problème. Cependant, les haricots ne sont pas accessibles à partir de différents modules par défaut.
Pour résoudre ce problème suivez ces étapes :
import org.springframework.contexte.annotation.ComponentScan;
Il a travaillé pour moi après l'ajout d'annotation ci-dessous dans l'application:
@ComponentScan({"com.seic.deliveryautomation.mapper"})
J'ai été d'obtenir l'erreur ci-dessous:
Dans mon cas, cette erreur apparaît parce que mon importation a été de mal, par exemple, à l'aide de printemps, l'importation apparaissent automatiquement:
mais j'avais besoin: