Kann ich dynamisch laden, zusätzliche Spring Konfigurations-Dateien in eine bestehende WebApplicationContext?
Beim starten meiner webapp in Tomcat 6.0.18, ich bootstrap Frühjahr mit nur, was notwendig ist, um initialisieren das system-nämlich jetzt -, Datenbank-Migrationen. Ich will nicht einen Teil des Systems zu laden, bis die Migration erfolgreich abgeschlossen haben. Dies verhindert, dass die anderen Bohnen aus zu warten auf die Migration abgeschlossen ist, bevor Sie den Betrieb, oder auch instanziieren.
Habe ich eine startup-appcontext.xml konfiguriert mit einem dbMigrationDAO, ein startupManager ist ein ThreadPoolExecutor, und schließlich, ein FullSystemLauch bean. Ich gebe eine Liste der Konfigurations-Standorten, um die FullSystemLaunch bean per setter-Injektion. Die FullSystemLaunch bean implementiert ServletContextAware, bekommt eine Referenz auf die aktuelle WebApplicationContext und somit kann ich eine ConfigurableListableBeanFactory. Leider, diese bean factory isConfigurationFrozen() gibt true zurück, also durch den Aufruf beanFactory.setConfigLocations(configLocations) hat keine Wirkung.
Kann ich dies bewerkstelligen oder ist der Frühling bei mir verhinderte tun, weil es ist ein bisschen aus dem üblichen heraus? Es erscheint sinnvoll, wenn verstanden, aber auch ein bisschen gefährlich. Und ja, ich bin bereit zu Blasen, die aktuellen Rahmen b/c der aktuell geladenen Singletons sind nicht erforderlich, sobald die Initialisierung abgeschlossen ist.
Danke für die Hilfe.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie mit den vorhandenen Kontext als übergeordneten Rahmen für die anderen Kontexte, obwohl ich bezweifle, dass Sie könnte ersetzen Sie den vorhandenen WebApplicationContext.
Wenn Sie OHR - KRIEG Verpackung, erhalten Sie diese out-of-the-box (Art) durch laden einer Anwendung Kontext aus dem OHR, und dann das hinzufügen einer in den KRIEG.
Nicht sicher, ob dies zutreffend ist, in Ihrer situation.
Meiner Meinung nach würde zu ermöglichen Frühling initialisieren Sie Ihre Bohnen ist es gerade passt - in der Reihenfolge Ihrer deklarierten Abhängigkeiten.
Wenn Sie brauchen, Datenbank-Migrationen gibt es ein paar Muster haben Sie zum ersten mal ausgeführt:
Der Vorteil ist klar: Einfachheit.
Könnte lazy-Initialisierung eine alternative sein für das, was Sie versuchen zu erreichen?
Möglich XmlBeanDefinitionReader kann man helfen?
können Sie upcat die WebApplicatonContext zu ConfigurableWebApplicationContext
dann verwenden Sie die setConfigurations Methode.
vergessen Sie nicht aktualisieren;
Es wurde die gleiche Aufgabe und ich habe zwei Kontexten:
startUpContext.xml
undapplicationContext.xml
. InstartUpContext.xml
es ist eine Bohne, die Trigger laden derappliationContext.xml
. (Anwendungskontext Position konfiguriert ist, instartUpContext.xml
als Eigenschaft eines triggers). Und schließlich der trigger ersetzt Standorte der aktuelle Kontext ein und aktualisiert es:(startUpContext.xml geladen wird mit einem standard-spring-context-loader des Hörers)