Spring bricht das Bootstrapping bei der Bean-Initialisierung nicht ab Fehler beim Scannen von Komponenten?

9

Ich habe eine Webanwendung mit einer Spring-Konfigurationsdatei. Ich habe folgenden Eintrag:

%Vor%

Die Bean "flyway" wird verwendet, um die Datenbank zu initialisieren und zu migrieren. Jetzt habe ich eine andere Bean, die die Datenquelle definiert, die die Anwendung verwenden sollte:

%Vor%

dieser hängt von der Flugbahn ab, um erfolgreich zu sein.

Alles funktioniert gut. Wenn jetzt die Bean "flyway" eine Exception auslöst, wird das Bootstrapping von Spring gestoppt und der Start der Webapp beendet - alles in Ordnung.

Jetzt fange ich an, das Autowiren für bestimmte Komponenten über:

zu aktivieren %Vor%

in einigen Klassen bin ich von Diensten abhängig, die in der XML-Konfiguration auch als Beans definiert sind. und sie wenden sich an die oben genannte Datenquelle.

jetzt das Problem: sobald ich die Anwendung jetzt bootstrap und "flyway" wirft eine Ausnahme die Ausnahme wird durch den Frühling in den folgenden Abschnitt geschluckt:

org.springframework.beans.factory.support.AbstractBeanFactory.getTypeForFactoryBean (String, RootBeanDefinition)

%Vor%

und jetzt spring tries, für jeden anderen abhängigen Dienst (der von der Datenquelle und damit von der Flugroute abhängt) initialisieren alle Beans, was wiederum immer wieder zum selben Vorgang führt.

Diese außergewöhnliche Schleife wird fortgesetzt, bis der Frühling abgeschlossen ist und versucht wird, alle möglichen Abhängigkeiten zu erstellen, anstatt nach dem ersten Fehler bei der Flugroute abzubrechen.

Dieses seltsame Verhalten beginnt erst, wenn ich das Scannen von Komponenten über

aktiviere %Vor%

Wenn diese Funktion deaktiviert ist, hält die Feder an, nachdem der erste Fehler aufgetreten ist. Es endet auch in einer anderen Klasse:

org.springframework.context.support.AbstractApplicationContext.refresh ()

%Vor%

Das ist das Verhalten, das ich auch im anderen Fall erwarten würde.

unsere Frühlingsversion: 3.0.6.RELEASE

Dieses Verhalten ist auch bei anderen Klassen vorhanden, die eine Runtime-Ausnahme werfen (nicht nur bei "flyway"), ist das ein Fehler oder erwartetes Verhalten?

jede Hilfe sehr geschätzt

marcel

    
Marcel 26.01.2012, 16:46
quelle

1 Antwort

1

Setzen Sie <context:component-scan... nach Ihrer Beans-Deklaration in Ihre XML-Datei als nico_ekito , die in Kommentaren angegeben wurde.

Bestätigt zur Arbeit:

  

Marcel: Wow, das scheint zu funktionieren. Du glaubst, ich sollte einen Bug öffnen? oder ist das beabsichtigte Verhalten?

    
MariuszS 06.01.2014 17:33
quelle

Tags und Links