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.
quelle
ignore-unresolvable="true"
, sonst brauchen Sie.ignoreUnresolvablePlaceholders
? Was sind unlösbare Platzhalter?PropertySourcesPlaceholderConfigurer
ist die Standard-Backing-Implementierung seit Spring 3.1, daher ist es sinnvoll, sie anstellePropertyPlaceholderConfigurer
der Bean-Implementierungsklasse zu verwenden.Ich weiß, dass dies eine alte Frage ist, aber die
ignore-unresolvable
Immobilie funktionierte nicht für mich und ich wusste nicht warum.Das Problem war, dass ich eine externe Ressource (so etwas wie
location="file:${CATALINA_HOME}/conf/db-override.properties"
) brauchte undignore-unresolvable="true"
diese in diesem Fall nicht funktioniert.Was man tun muss, um eine fehlende externe Ressource zu ignorieren, ist:
Nur für den Fall, dass jemand anderes darauf stößt.
quelle
ignore-unresolvable
undignore-resource-not-found
dienen verschiedenen Zwecken. Um Fehler zu vermeiden , wenn die Eigenschaft Datei nicht existiert, verwendetignore-resource-not-found="true"
. Verwenden Sie, um Fehler zu vermeiden, wenn Sie eine Eigenschaft verwenden, die in der Datei nicht vorhanden istignore-unresolvable="true"
. Wenn Sie mehrere Dateien haben, die jeweils teilweise Eigenschaftensätze enthalten, und jede Datei möglicherweise vorhanden ist oder nicht, müssen Sie beide verwenden.Sie können mehrere
<context:property-placeholder />
Elemente verwenden, anstatt mehrere PropertiesPlaceholderConfigurer-Beans explizit zu deklarieren.quelle
Die
PropertiesPlaceholderConfigurer
Bean hat eine alternative Eigenschaft namens "propertiesArray". Verwenden Sie diese Eigenschaft anstelle der Eigenschaft "properties" und konfigurieren Sie sie mit einer<array>
der Eigenschaftsreferenzen.quelle
Ich habe die folgende Lösung ausprobiert, sie funktioniert auf meinem Computer.
Quelle: http://www.baeldung.com/2012/02/06/properties-with-spring/
quelle