Wie kann ich Eigenschaften in Eigenschaftendateien im Frühling verpflichtend machen?

8

Ich habe eine ApplicationContext.xml-Datei mit dem folgenden Knoten:

%Vor%

Er gibt an, dass beide properties -Dateien von meiner Anwendung verwendet werden.

Innerhalb von pathConfiguration.properties sind einige Pfade definiert, beispielsweise:

%Vor%

A PathConfiguration Bean hat für jeden Pfad Einstellungen.

Das Problem ist: Wenn einige dieser obligatorischen Pfade nicht definiert sind, wird kein Fehler ausgelöst. Wie und wo sollte ich mit diesem Problem umgehen?

    
Paulo Guedes 04.05.2010, 10:55
quelle

3 Antworten

6

Das Standardverhalten des PropertyPlaceholder, der über <context:property-placeholder ... /> konfiguriert wird, löst eine Ausnahme aus, wenn eine Eigenschaft nicht aufgelöst werden kann, wenn sie an einer bestimmten Stelle benötigt wird, solange Sie sie nicht anders konfigurieren.

Für Ihren Fall, wenn Sie eine Bean haben, die einige Eigenschaften wie diese benötigt, wird sie fehlschlagen, wenn der Wert nicht aufgelöst werden kann. Zum Beispiel so:

%Vor%

Wenn Sie den PropertyPlaceholder lockern und nicht eine Ausnahme auslösen möchten, wenn eine Eigenschaft nicht aufgelöst werden kann, können Sie den PropertyPlaceholder so konfigurieren, dass nicht auflösbare Eigenschaften wie diese <context:property-placeholder ignore-unresolvable="true" ... /> ignoriert werden.

    
stefanglase 04.05.2010, 11:47
quelle
1

Eine Möglichkeit, die Verifizierung von Parametern zu verstärken, ist die Umstellung auf eine klassische PropertyPlaceholderConfigurer Bean in Ihrer Beans-Datei.

Das PropertyPlaceholderConfigurer hat Eigenschaften, mit denen Sie sein Verhalten optimieren und festlegen können, ob eine Ausnahme ausgelöst wird oder nicht, wenn ein Schlüssel fehlt (siehe setIgnoreUnresolvablePlaceholders oder setIgnoreResourceNotFound ).

Wenn ich mich richtig erinnere, wird in Spring 2.5 nur das location-Attribut für <context:property-placeholder> unterstützt (die Dinge könnten sich allerdings geändert haben).

    
user159088 04.05.2010 11:48
quelle
0

Ich bin mir nicht sicher, ob ich Ihr Problem vollständig verstehe, aber es gibt wahrscheinlich eine Vielzahl von Möglichkeiten, dies zu erreichen. Eine wäre es, die Pfade durch Verwendung der Konstruktorinjektion zwingend zu machen. Im Konstruktor könnten Sie dann die eingehenden Werte überprüfen und, wenn null, zum Beispiel BeanInitializationException-Instanzen werfen.

    
drekka 04.05.2010 11:18
quelle