Frühjahr : PropertyPlaceholderConfigurer nicht finden können property-Datei
Ich habe ein seltsames problem mit Frühjahr mit PropertyPlaceholderConfigurer
. Eine meiner Bohnen ist so konzipiert wie folgt :
<bean name="propertyPlaceholder" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<value>classpath:jdbc.properties</value>
</property>
</bean>
Das problem ist, dass der Frühling nie finden, jdbc.Eigenschaften (FileNotFoundException
). Die Datei wird in einem Ordner namens "resources", die in der bundle-classpath (ich arbeite in einem OSGi-Projekt).
Ich habe versucht fast jeder Kombination ("jdbc.Eigenschaften", "/jdbc.Eigenschaften", "classpath:jdbc.Eigenschaften", "classpath:/jdbc.Eigenschaften", "/resources/jdbc.Eigenschaften", etc...), aber es funktioniert nie.
Informationen, wenn irgendwann, ich glaube so etwas wie :
URL u = someClassLoader.getResource("jdbc.properties");
es funktioniert ohne Probleme und die Datei finden. Eigentlich bin ich völlig unfähig zu verstehen, was ist der Fehler mit dem Frühling.
Wenn du keine Ahnung hast, um mir zu helfen, vielen Dank im Voraus. Ich bin nicht sehr erfahren im Frühjahr, so habe ich vielleicht getan, irgendwo ein Fehler.
[BEARBEITEN]
Tatsächlich, es ist ein problem der classloader :
Wenn ich das mache :
new ClassPathResource("jdbc.properties");
funktioniert es nicht. Aber :
new ClassPathResource("jdbc.properties",someClassIntheBundle.class.getClassLoader());
funktioniert perfekt.
Glaube ich, dass der Frühling verwenden Sie die ClassLoader von seinem eigenen Bündel, das verbraucht mein Bündel. Kennst du eine Lösung für dieses knifflige problem ?
Dank,
InformationsquelleAutor ThR37 | 2011-08-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
versuchen
classpath*:jdbc.properties
Tatsächlich, es beschwert sich nicht mehr, aber es findet nicht die Lage als gut :s vielen Dank auf alle Fälle für deine Hilfe. Wissen Sie, was ist der Hauptunterschied mit classpath: ?
Sorry für die lange Antwort. Sie finden es im Frühling Referenzen. Und natürlich können Sie erstellen, die sub-Klasse von PropertyPlaceholderConfigurer und Last-prop-Dateien mit
MyConfigurer.class.getResourceAsStream()
.InformationsquelleAutor Alexey Kutuzov
IANA OSGI-Entwickler, aber eine schnelle Google-Suche die Ergebnisse in einem link der Spring-osgi Dokumentation. Blick auf Abschnitt 5.4, und beachten Sie, dass das spring-osgi-Paket einige änderungen an
Resource
laden. Es sieht aus wie dieResourceLoader
implementiert die Standard -ApplicationContext
für osgi wird automatisch pre-pendosgibundle:
wenn keine anderen Präfix versehen ist.Scheint es, als ob es einen Unterschied im Umfang zwischen dem Pfad gesucht, bei der Verwendung von
classpath:
und den Pfad verwendet, wennclasspath*:
, aber ich habe bisher nicht in der Lage zu finden eine gute Erklärung dafür.Ich bin nicht in der Lage zu finden, die Dokumentation aktuell, aber ich erinnere mich, dass gab es ein Mangel in der Eigenschaft token-Auflösung, wenn die Eigenschaften geladen, im
PropertyPlaceholderConfigurer
in einem übergeordnetenApplicationContext
wurden verwiesen wird, die von einerimport
edApplicationContext
.InformationsquelleAutor Ryan Ransford