2016-08-01 8 views
3

Ich versuche zu vermeiden, Komponenten-Scan, um die Startzeit in unseren Modultests und in unserer Web-App im Allgemeinen zu reduzieren.Wie starte ich eine Spring Boot Web Application ohne ComponentScan

Wenn ich @SpringBootApplication mit @SpringBootConfiguration @EnableAutoConfiguration ersetzen, erhalte ich die folgende Fehlermeldung:

Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean

Kann ich manuell die EmbeddedServletContainerFactory irgendwie importieren?

+0

Ja, Sie können die Konfiguration innerhalb des Codes (die mit Anmerkungen versehene Konfiguration) "replizieren", selbst wenn der Code eine Bibliothek eines Drittanbieters ist. Eigentlich ist es nützlich, wenn Sie die Konfiguration aus irgendeinem Grund überschreiben müssen. In meinen Tests ist der Unterschied zwischen der Verwendung von Komponentenscan oder nicht minimal. Ich würde es vermeiden. – rdllopes

+2

Werfen Sie einen Blick auf 'org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration'. So erstellt Spring-Boot eine EmbeddedServletContainerFactory. Ich kann nicht sagen, warum Sie keine in Ihrem Test ohne weitere Informationen haben (versuchen Sie, die Bedingungen zu debuggen, wenn Sie wissen wollen, warum), aber wenn Sie Ihre eigene Fabrik registrieren möchten, kopieren Sie einfach die entsprechende EmbeddedServletContainerFactory 'Bean-Konfiguration von' EmbeddedServletContainerAutoConfiguration'. – Pieter

Antwort

2

Miloš und Pieter zur Verfügung gestellt die Mittel, um die Antwort zu finden. Eine minimale Frühlings-Boot-Web-Anwendung kann mit dem folgenden gestartet werden:

@SpringBootConfiguration 
@Import({EmbeddedServletContainerAutoConfiguration.class}) 
public class Application extends SpringBootServletInitializer { 
    ... 
} 

ServerPropertiesAutoConfiguration.class könnte auch nützlich sein, Dinge zu holen wie Portnummer für die Anwendung.

3

Mein Vorschlag ist, zuerst Ihre Anwendung mit dem Debug-Flag zu starten und alle aktivierten Autokonfigurationen aufzuschreiben. Deaktivieren Sie dann die automatische Konfiguration, und importieren Sie diese Konfigurationen, indem Sie in Ihrer Anwendungsklasse @Import verwenden.

Alternativ können Sie jede dieser Konfigurationsklassen betrachten und sehen, was Spring Boot für Sie konfiguriert und entscheiden, ob Sie stattdessen Ihre eigenen Konfigurationen bereitstellen möchten - Sie können nur die Autokonfigurationsklassen nachahmen und alles sollte gleich funktionieren Weg.

Verwandte Themen