it-swarm.com.de

Konfiguration mit Annotation @SpringBootApplication

Ich habe Probleme mit der Spring Boot-Konfiguration.

Ich habe ein Basis-Spring-Boot-Projekt mit https://start.spring.io/ erstellt.

Und ich habe ein Problem, die Konfiguration funktioniert nur für Klassen im Unterkatalog:

 enter image description here

Ich habe Annotation @ComponentScan ausprobiert, aber es hat nicht geholfen.

Hast du eine Idee, was ich damit machen kann?

16
zaqpiotr

Die Spring Boot-Dokumentation für @SpringBootApplication states

Viele Spring Boot-Entwickler haben ihre Hauptklasse immer mit Anmerkungen versehen mit @Configuration, @EnableAutoConfiguration und @ComponentScan. Da diese Anmerkungen so häufig zusammen verwendet werden (insbesondere, wenn Sie die oben genannten bewährten Methoden befolgen), bietet Spring Boot eine bequeme @SpringBootApplication alternative.

Die Annotation @SpringBootApplication entspricht der Verwendung von @Configuration, @EnableAutoConfiguration und @ComponentScan mit ihrer Standardattribute: [...]

wo der @ComponentScan javadoc angibt

Wenn bestimmte Pakete nicht definiert sind, wird der Scan von .__ aus durchgeführt. Paket der Klasse, die diese Annotation deklariert.

Das heißt, nur die Typen, die sich in demselben Paket befinden wie ReadingListApplication, werden gescannt.

Wenn Sie eine benutzerdefinierte Konfiguration wünschen, geben Sie Ihren eigenen @Configuration, @EnableAutoConfiguration und @ComponentScan an.

44

Wenn Sie ein Spring boot-Projekt einrichten, verwenden Sie Ihre Application-Klasse (die, die die @SpringBootApplication-Annotation im Basispaket enthält. 

Der @SpringBootApplication führt unter anderem einen Komponentenscan durch. Es wird jedoch nur auf Unterpaketen geprüft. Wenn Sie diese Klasse in com.mypackage einfügen, wird sie nach allen Klassen in Unterpaketen, d. h. com.mypackage. *, suchen. 

Wenn Sie dies nicht möchten, können Sie einer Klasse auch einen @ComponentScan hinzufügen, der das Root-Paket angibt, d. H. @ComponentScan("com.mypackage").

Ich würde empfehlen, Sie haben ein Basispaket, dh com.mypackage. Und innerhalb dieser Pakete haben Sie Ihre Unterpakete. Haben Sie eine Klasse mit dem @SpringBootApplication in diesem Basispaket.

11
Kabir

Überprüfung der Spring-Dokumentation:

http://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/autoconfigure/SpringBootApplication.html

Mit der @SpringBootApplication können Sie die Standardwerte der Komponentensuche überschreiben. Sie müssen es nur als Parameter einfügen:

@SpringBootApplication(scanBasePackages = "entertainment")

oder String Array:

@SpringBootApplication(scanBasePackages = {"entertainment", "readinglist"})

10
alvgarvilla

Ich hatte das gleiche Problem und zur Lösung dieses Problems habe ich meine Pakete so umbenannt.

"com.project"

dort können Sie Ihre SpringBootAplication-Hauptklasse platzieren und dann einfach die anderen Pakete erstellen, die mit "com.project" beginnen.

"com.project.dao"

"com.project.controller"

Beim Erstellen dieser Unterprojektstruktur müssen Sie scanBasePackages nicht in der @SpringBootApplication-Annotation verwenden. Dadurch kann Ihre Hauptklasse jede Komponente in Ihrem Projekt finden.

Falls Sie sich für scanBasePackages entschieden haben, denken Sie daran, dass Sie alle Ihre Komponentenpakete so einstellen müssen.

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

1
Wesley Silva