Tout en modularisant notre projet en différents projets maven indépendants utilisant spring boot et maven, nous avons rencontré un problème où l'autowiring des beans dans le projet multi module maven ne fonctionne pas.Spring Boot L'auto-câblage des haricots ne fonctionne pas dans le projet multi-module maven
Juste pour vous donner un aperçu de la question, ci-dessous sont les projets Maven indépendants développés jusqu'à présent
- CoreServices - Contient des objets de domaine de démarrage de printemps d'application entière: sortie JAR
- DBservices1-Contains démarrage de printemps référentiels et services (services de base de données) pour accéder à la base de données: sortie JAR
- Récompenses -Contient module récompenses fichiers liés (contrôleurs, services (Business Logic services), Vues): sortie JAR
- RewardsApp- depl indépendant projet oyable Maven: Sortie WAR
Voici la structure de dépendance RewardsApp-> Récompenses -> DBservices1 -> CoreServices
Le problème est annotation @Autowired
utilisé dans Récompenses et DBservices1 pour aller chercher les services mis en correspondance annotées avec @Service
/@Repository
ne sont pas disponibles dans le projet RewardsApp
.
Pour contourner ce problème, nous avons configuré les beans en RewardsApp
avec l'annotation @Bean
, puis les services sont disponibles pour le démarrage du serveur. Avec cette approche, nous devons configurer manuellement tous les beans dans RewardsApp
utilisés dans les projets dépendants. Nous avons de nombreux services et référentiels dans notre application et nous pensons que la création de haricots comme celui-ci n'est pas une bonne façon car il faut créer de nombreux haricots.
S'il vous plaît noter que nous avons créé tous les contrôleurs de démarrage du printemps, les services, repositorys dans tous les projets dans le cadre package com.company.application
est Ci-dessous l'extrait de classe principale:
@SpringBootApplication
@ComponentScan(basePackages = {"com.company.application"})
public class RewardsApp extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(RewardsApp.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(RewardsApp.class);
}
}
/**
*Manual beans in RewardsApp
**/
@Bean
public SomeService someService()
{
return new SomeService();
}
Est-ce que votre 'RewardsApp' est également dans le paquet' com.company.application'? Si ce n'est pas le cas, placez-le ou dans le paquet 'com.company' et supprimez le' @ ComponentScan' (qui est déjà impliqué par '@ ComponentScan'). –