web-dev-qa-db-fra.com

Configuration à l'aide de l'annotation @SpringBootApplication

J'ai un problème avec la configuration Spring Boot.

J'ai créé un projet de base Spring Boot à l'aide de https://start.spring.io/

Et j'ai un problème, la configuration ne fonctionne que pour les classes du sous-catalogue:

 enter image description here

J'ai essayé l'annotation @ComponentScan mais cela n'a pas aidé.

Avez-vous une idée de ce que je peux faire avec ça?

16
zaqpiotr

Les états documentation Spring Boot pour @SpringBootApplication

De nombreux développeurs Spring Boot ont toujours leur classe principale annotée avec @Configuration, @EnableAutoConfiguration et @ComponentScan. Comme ces annotations sont si souvent utilisées ensemble (surtout si vous suivez les meilleures pratiques ci-dessus), Spring Boot fournit un. alternative commode @SpringBootApplication.

L'annotation @SpringBootApplication équivaut à utiliser @Configuration, @EnableAutoConfiguration et @ComponentScan avec leur attributs par défaut: [...]

où le @ComponentScan javadoc indique

Si des packages spécifiques ne sont pas définis, l'analyse se fera à partir du fichier package de la classe qui déclare cette annotation.

Autrement dit, seuls les types contenus dans le même package que votre ReadingListApplication seront analysés.

Si vous souhaitez une configuration personnalisée, indiquez vos propres @Configuration, @EnableAutoConfiguration et @ComponentScan, selon le cas.

44

Lors de la configuration d'un projet Spring boot, définissez votre classe Application (celle qui contient l'annotation @SpringBootApplication dans le package de base. 

Une des choses que le @SpringBootApplication fait est une analyse de composant. Mais, il ne scanne que sur sous-packages . Si vous placez cette classe dans com.mypackage, toutes les classes des sous-packages seront analysées, à savoir com.mypackage. *. 

Si vous ne voulez pas le faire de cette façon, vous pouvez également ajouter un @ComponentScan à une classe spécifiant le package racine i.e @ComponentScan("com.mypackage")

Je vous recommanderais un package de base, à savoir com.mypackage. Et au sein de ces packages, ayez vos sous-packages. Avez-vous une classe contenant le @SpringBootApplication dans ce paquet de base?.

11
Kabir

J'avais le même problème et pour le résoudre, j'ai renommé mes paquets comme ceci.

"com.project"

là, vous pouvez placer votre classe principale SpringBootAplication, puis créer simplement les autres packages commençant par "com.project"

"com.project.dao"

"com.project.controller"

En créant cette structure de sous-projet, vous n'avez pas besoin d'utiliser scanBasePackages dans l'annotation @SpringBootApplication, ce qui permettra à votre classe principale de trouver tous les composants de votre projet.

Et au cas où vous choisiriez d’utiliser scanBasePackages, n’oubliez pas que vous devez définir tous vos packages de composants comme ceci.

@SpringBootApplication (scanBasePackages = {"com.project.dao", "Com.project.controller"})

1
Wesley Silva