2012-05-10 3 views
15

Wir haben einen Weg weisen Eigenschaften auf dem Classpath aus einer Datei zu laden:Wie auf Dateisystem-Eigenschaft-Platzhalter für Datei verwenden

<context:property-placeholder location="classpath:myConfigFile.properties" /> 

und es funktionierte großartig. Aber jetzt wollen wir Eigenschaften aus einer bestimmten Datei auf dem System laden, das NICHT im Klassenpfad ist. Wir wollten die Datei dynamisch laden können, daher verwenden wir eine Java-Umgebungsvariable, um sie zu füllen. Ich werde ein einfaches Beispiel unten geben:

In Java:

System.setProperty("my.prop.file", "/path/to/myConfigFile.properties"); 

Im Frühjahr XML:

<context:property-placeholder location="${my.prop.file}" /> 

ich auch es auf diese Weise versucht haben, dank einer Idee von Luciano:

<context:property-placeholder properties-ref="prop" /> 

<util:properties id="prop" location="reso"/> 

<bean id="reso" class="org.springframework.core.io.FileSystemResource"> 
    <constructor-arg index="0" value="${my.prop.file}" /> 
</bean> 

Alles, was ich versucht habe, ist fehlgeschlagen. Egal, worauf ich meine.pro.file setze. Greatest Hits sind:

<context:property-placeholder location="/path/to/myConfigFile.properties" /> 
(ClassNotFoundException: .path.to.myConfigFile.properties) 

<context:property-placeholder location="file:/path/to/myConfigFile.properties" /> 
(ClassNotFoundException: file:.path.to.myConfigFile.properties) 

<context:property-placeholder location="file:///path/to/myConfigFile.properties" /> 
(ClassNotFoundException: file:...path.to.myConfigFile.properties) 

Wie verwenden Sie Immobilien-Platzhalter mit einem Standort, der auf dem Dateisystem und nicht auf dem Classpath? Wir verwenden Spring 3.0.5.

Es stellte sich heraus, dass ein Problem mit dem Skript aufgetreten ist, das das Java-Programm ausführt, das die Spring-Datei lädt. Danke für die Hilfe. Ich werde darum bitten, dass diese Frage gelöscht wird, da der ursprüngliche Code schließlich funktioniert. Vielen Dank für Ihre Hilfe.

+13

BTW Stark w nicht einverstanden/diese geschlossen –

+1

Nicht einverstanden mit dem Schließen auch. Ich kam hier nach etwas googeln und es beschreibt die genaue Frage, die ich habe ... –

+1

Ich auch - ich verstehe nicht, warum das mit einer "zu lokalisierten" Kategorie geschlossen wurde? Es scheint ziemlich allgemein – monojohnny

Antwort

4

Was ist mit diesem Weg?

<context:property-placeholder properties-ref="prop" /> 

<util:properties id="prop" location="reso"/> 

<bean id="reso" class="org.springframework.core.io.FileSystemResource"> 
    <constructor-arg index="0" value="/yourpathandfile" /> 
</bean> 
+0

Kann ich in die Java-Umgebungsvariable für den Wert = "/ yourpathandfile"? Ich versuche es mal. Danke –

+0

Das scheint nicht zu funktionieren. Die Eigenschaft wird durchlaufen, aber die gleichen Fehler passieren. Vielen Dank für Ihre Hilfe. Ist das nicht möglich? –

+0

Was ist, wenn Sie $ {my.prop.file} mit dem echten Pfad fest codieren, nur um zu sehen, ob das funktioniert? – Luciano

14

Dies hat bei mir funktioniert:

<context:property-placeholder location="file:/path/to/myConfigFile.properties" /> 

Aber diese (interessant) tat nicht:

<context:property-placeholder location="#{ systemProperties['foo'] }" /> 

Ich habe

java.io.FileNotFoundException: Could not open ServletContext resource [/#{ systemProperties['foo'] }] 

Du gehst nicht zu in der Lage sein, einen Eigenschaftsplatzhalter ${..} mit th zu verwenden Die Definition eines PropertyPlaceholderConfigurer. Es ist das Huhn vor dem Ei.

Sie können immer PropertyPlaceholderConfigurer Unterklasse und haben es tun, was Sie (zum Beispiel wollen, rufen setLocations() in einem @PostConstruct Verfahren dann anstelle der Verwendung <context:property-placeholder>, zu verwenden:.

<bean class="com.foo.MyPropertyPlaceholderConfigurer"/> 
+0

Ich dachte, dass der Ausdruck Sprache dafür erlaubt, wie in [dieser Artikel über die Verwaltung von Property-Dateien mit Feder] (http: //www.summa -tech.com/blog/2009/04/20/6-tips-for-managing-property-files-with-spring/). Ich werde versuchen zu verstehen, was in PropertyPlaceholderConfigurer unterklassifiziert werden muss, damit es herausfinden kann, wie man eine Eigenschaftendatei dynamisch lädt. Es schien so eine einfache Idee und es scheint jetzt mit Spring so verworren. –

Verwandte Themen