Nach dem Start meiner Webapp in Tomcat 6.0.18, Bootstrap Spring mit nur was ist notwendig, initialisieren das System - und zwar für jetzt, Datenbank Migrationen. Ich möchte nicht, dass ein Teil des Systems geladen wird, bis die Migrationen erfolgreich abgeschlossen wurden. Dies verhindert, dass die anderen Beans warten müssen, bis die Migrationen abgeschlossen sind, bevor sie ausgeführt oder sogar instanziiert werden.Kann ich zusätzliche Spring-Konfigurationsdateien dynamisch in einen vorhandenen WebApplicationContext laden?
Ich habe eine startup-appcontext.xml konfiguriert mit einer dbMigrationDAO, eine startupManager, die eine ThreadPoolExecutor ist, und schließlich eine FullSystemLauch-Bean. Ich übergebe eine Liste von Konfigurationsorten an die FullSystemLaunch-Bohne über Setter-Injektion. Die FullSystemLaunch-Bean implementiert ServletContextAware, erhält einen Verweis auf die aktuelle WebApplicationContext und somit kann ich eine ConfigurableListableBeanFactory haben. Leider gibt diese Bean-Factory isConfigurationFrozen() true zurück, so dass der Aufruf von beanFactory.setConfigLocations (configLocations) keine Auswirkungen hat.
Kann ich dies erreichen oder verhindert Spring dies, weil es etwas ungewöhnlich ist? Es scheint vernünftig, wenn verstanden, aber auch ein bisschen gefährlich. Und ja, ich bin bereit den aktuellen Kontext wegzublasen b/c die aktuell geladenen Singletons werden nach Abschluss der Initialisierung nicht benötigt.
Vielen Dank für die Hilfe.
Nein; Es müsste immer noch Logik in jeder der Beans geben, um zu verhindern, dass sie entweder instanziiert wird oder "ihre Arbeit macht", bevor das System initialisiert wird. – Elliot
Warum nicht einfach alle Bohnen zu faul setzen. Erstellen Sie dann eine Halte-Bean, die ebenfalls lazy-initialisiert ist, und fügen Sie alle anderen Beans als Abhängigkeiten hinzu. Wenn Sie beanContext.getBean ("mybean") aufrufen, werden alle Beans instanziiert. – kgiannakakis