2016-12-11 2 views
3

Ich habe einen Maven-Multi-Modul-App mit der Struktur:Frühling Boot-Multi-Modul-Anwendung mit @SpringBootConfiguration

-parent_project 
-actual_project 
-jpaBase 

Geordnetes Projekt ist eine Maven-Aggregation der Projekte: actual_project und jpaBase (beide Feder Boot-Anwendungen)

jpaBase ist eine Abhängigkeit von actual_project.

Jetzt, als ich tun, um eine mvn Paket Ich bin ein Unit-Test-Fehler bekommen:

Gefunden mehrere @SpringBootConfiguration kommentierten Klassen

weil beide jpaBase und actual_project haben Klassen mit @SpringBootConfiguration kommentiert.

Wie kann ich sicherstellen, dass Spring die SpringBootConfiguration-Klasse nur von actual_project und nicht von jpaBase berücksichtigt.

Danke!

+0

Ist 'jpaBase' eine tatsächliche Anwendung, die unabhängig oder nur die Persistenzschicht für Ihr' actual_project' ausgeführt werden muss? – YoungSpice

Antwort

3

Vom Frühling Dokumentation:

Bewerbung sollte immer nur eine @SpringBootConfiguration und meist idiomatischen Frühlings-Boot-Anwendungen wird es von @SpringBootApplication erben.

Sie sagte:

weil beide jpaBase und actual_project haben mit @SpringBootConfiguration kommentierten Klassen.

Es sollte nicht. Diese Annotation muss nur einmal pro Anwendung verwendet werden. Daher sollten nur actual_project und parent_project, bei denen es sich um Spring-Boot-Anwendungen handelt, diese Annotation deklarieren.

@SpringBootConfiguration ersetzt die Erklärung dieser Anmerkungen:
@Configuration, @EnableAutoConfiguration und @ComponentScan

Sie haben die Informationen in the official documentation.

Also, in Ihrem jpaBase Projekt, könnten Sie @SpringBootConfiguration durch die Erklärung dieser drei Anmerkungen ersetzen:

@Configuration 
@EnableAutoConfiguration 
@ComponentScan({ "yourPackage" }) 
public class JpaConfig { 
    .... 
} 
+1

Der Build ist fehlgeschlagen, nachdem die SpringBootApplication-Annotation für das jpaBase-Projekt ersetzt wurde, da jetzt keine SpringBootApplication-Clsas für jpaBase gefunden werden konnten. Aber basierend auf Ihrem Vorschlag habe ich nun jpaBase als SpringBootApplication entfernt, indem ich die SpringBootDependencies vom übergeordneten Projektabschnitt zum dependency management-Abschnitt im parent_project pom verschoben habe. Es funktioniert jetzt –

0

Eigentlich für jeden Blick auf diese, nur SpringBootConfiguration ersetzt @Configuration.

@SpringBootApplication ersetzt @Configuration, @EnableAutoConfiguration und @ComponentScan.