Wir schreiben derzeit eine Anwendung, die in mehrere Projekte / Module aufgeteilt ist. Nehmen wir zum Beispiel die folgenden Module:
- myApp-DAO
- myApp-jabber
Jedes Modul hat eine eigene Spring-Kontext-XML-Datei. Für das DAO-Modul habe ich einen PropertyPlaceholderConfigurer, der eine Eigenschaftendatei mit den erforderlichen Datenbankverbindungsparametern liest. Im Jabber-Modul habe ich auch einen PropertyPlaceHolderConfigurer für die Jabber-Verbindungseigenschaften.
Jetzt kommt die Hauptanwendung, die myApp-DAO und myApp-jabber enthält. Es liest alle Kontextdateien und startet einen großen Spring-Kontext. Leider scheint es nur einen PropertyPlaceholderConfigurer pro Kontext zu geben, sodass jedes Modul, das zuerst geladen wird, seine Verbindungsparameter lesen kann. Der andere löst eine Ausnahme mit dem Fehler "Platzhalter 'jabber.host' konnte nicht aufgelöst werden" aus.
Ich verstehe irgendwie, was das Problem ist, aber ich kenne keine Lösung - oder die beste Vorgehensweise für meinen Anwendungsfall.
Wie würde ich jedes Modul so konfigurieren, dass jedes seine eigene Eigenschaftendatei laden kann? Im Moment habe ich den PropertyPlaceHolderConfigurer aus den separaten Kontextdateien verschoben und sie in den Kontext der Hauptanwendung eingefügt (Laden aller Eigenschaftendateien mit einem einzigen PropertyPlaceHolderConfigurer). Dies ist jedoch zum Kotzen, da jetzt jeder, der das Dao-Modul verwendet, wissen muss, dass er in seinem Kontext einen PropertyPlaceHolderConfigurer benötigt. Auch die Integrationstests im Dao-Modul schlagen fehl usw.
Ich bin gespannt auf Lösungen / Ideen aus der Stackoverflow-Community.