Po uruchomieniu aplikacji webowej w Tomcat 6.0.18, uruchamiam Spring tylko z tego, co jest konieczne, aby zainicjować system - czyli na razie migracje bazy danych. Nie chcę, aby jakakolwiek część systemu była ładowana, dopóki migracja nie zakończy się pomyślnie. Uniemożliwia to innym fasolom oczekiwanie na zakończenie migracji przed uruchomieniem lub nawet utworzenie instancji.Czy mogę dynamicznie ładować dodatkowe pliki konfiguracyjne Spring do istniejącego obiektu WebApplicationContext?
Mam plik startup-appcontext.xml skonfigurowany za pomocą dbMigrationDAO, menedżera startupManager, który jest ThreadPoolExecutor, a na końcu komponent bean FullSystemLauch. Przekażę listę lokalizacji konfiguracji do fasoli FullSystemLaunch za pomocą zastrzyku ustawiającego. Fasola FullSystemLaunch implementuje ServletContextAware, otrzymuje odniesienie do bieżącego WebApplicationContext, a zatem mogę mieć ConfigurableListableBeanFactory. Niestety, ta fabryka fasoli jestConfigurationFrozen() zwraca true, więc przez wywołanie beanFactory.setConfigLocations (configLocations) nie ma wpływu.
Czy mogę to zrobić, czy też wiosna przeszkadza mi w tym, ponieważ jest to trochę niecodzienne? Wydaje się rozsądne, jeśli jest zrozumiałe, ale także nieco niebezpieczne. I tak, jestem gotów zdmuchnąć aktualny kontekst b/c aktualnie załadowane Singletony nie są potrzebne po zakończeniu inicjalizacji.
Dziękuję za pomoc.
Nie; w każdym z komponentów musi pozostać logika, aby zapobiec inicjacji lub "wykonaniu swojej pracy" przed zainicjalizowaniem systemu. – Elliot
Dlaczego nie po prostu ustawić wszystkie ziarna, aby były leniwe. Następnie utwórz komponent bean właściciela, również zainicjowany w trybie leniwym i dodaj wszystkie pozostałe komponenty bean jako zależności. Po wywołaniu beanContext.getBean ("mybean") zostaną utworzone wszystkie komponenty bean. – kgiannakakis