laden einer Variablen Frühjahr applicationContext.xml Datei basierend auf einer Eigenschaft angegeben, die außerhalb der app war-Datei?
Ich habe müssen Sie die Feder wechseln applicationContext.xml Datei, die verwendet wird, basierend auf einer Eigenschaft, diese Eigenschaft MUSS definiert werden, die irgendwo außerhalb der war-Datei (dh. es kann nicht in web.xml). Derzeit habe ich kam zu folgender Lösung (siehe meine Antwort unten), Frage mich, ob es einen besseren Weg, dies zu tun?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie sich überlegt mit dem beanRefContext Ansatz. (ContextSingletonBeanFactoryLocator). Auf diese Weise können Sie Ihr spring config-Dateien (und Ihre Namen) via another spring config-Datei.
Dann können Sie paramaterise, dass die Datei durch welches Mittel Sie für geeignet halten, und schalten Sie die Datei-Namen, die Art und Weise.
Die Datei sieht wie folgt aus:
Und Sie können PropertyPlaceHolderConfigurer, um den Wert NameOfBeanConfigFile.
Ich mag diesen Ansatz, da es bedeutet, dass ich kann mischen statischen bean config-Datei-Namen, die mit der dynamischen bean config-Datei Namen und so nicht zu duplizieren bean config.
Wenn ich hatte eine ähnliche Sache würde ich Parametrierung über eine config-Datei geladen, wie eine URL-Ressource (über jndi)
gibt es 4 Teile für meine Lösung. zuerst in web.xml meine Bewerbung habe ich Folgendes definiert:
Dann erweitere ich ContextLoaderListener
und ContextLoader
werden und schließlich in mein tomcat-Start -, die ich definieren Sie die Umgebungsvariable in setenv.bat
diese Lösung lädt es aus einer environment-variable ist, aber der code ist flexibel und erlaubt es, in ein-system-Eigenschaft statt.
Wenn Sie laden Sie Ihre Anwendung Kontext durch die classpath, können Sie überschreiben, indem du eine andere version applicationContext.xml in der server-classpath.
Wäre meine Lösung, eine sehr einfache Datei ApplicationContext, der die realen Anwendungskontext :
applicationContext.xml :
Wenn Sie möchten, einen anderen Kontext, fügen Sie ein applicationContext.xml auf dem server-classpath mit :
Haben und realContext.xml und realContext2.xml verpackt in den KRIEG. Keine Notwendigkeit für fancy-Kontext-listener.
Nur meine Meinung, aber ich ziemlich Abneigung gegen Kriege, die sich nicht selbst enthalten. Ich finde es sehr praktisch, um eine einzige Einheit, Einsatz. Also ich würde lieber 2 verschiedene Versionen von mein KRIEG, während dem build-Prozess, eine für jede benötigte Konfiguration.
Andere Lösung, wenn Sie möchten, laden Sie eine andere bean in Abhängigkeit einer bestimmten Eigenschaft, können Sie eine PropertyPlaceholderConfigurer und setzen Sie den Namen der bean eine Eigenschaft :
und eine property-Datei mit :
oder