4 Stimmen

Frühling <util:properties /> mit Wildcards

Ich möchte Schlüssel-Wert-Paare von mehreren Orten laden. Meine erste Vermutung war:

<util:properties id="requestProcessorRepository"
  location="classpath*:*requestProcessors.properties"/>

aber sie ist nicht gültig

Invocation of init method failed; nested exception is java.io.FileNotFoundException: class path resource [classpath*:*requestProcessors.properties] cannot be opened because it does not exist
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1412)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:546)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:872)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:423)
    at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:84)
    at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:1)
    at org.springframework.test.context.TestContext.loadApplicationContext(TestContext.java:280)
    at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:304)
    ... 24 more

Ohne Platzhalter funktionierte es zunächst nicht.

Gibt es also noch andere Möglichkeiten, ein Eigenschaftsobjekt / eine Karte aus Platzhalterdateien zu erstellen?

7voto

axtavt Punkte 233070

Erstens: Ihr Ressourcenpfad classpath*:*requestProcessors.properties nicht zuverlässig ist (von Frühling Referenz ) :

Bitte beachten Sie, dass "classpath*:" in Kombination mit mit Ant-ähnlichen Mustern kombiniert wird nur dann zuverlässig funktioniert, wenn mindestens ein Wurzelverzeichnis, bevor das Muster startet, es sei denn, die eigentlichen Zieldateien im Dateisystem liegen. Das bedeutet dass ein Muster wie "classpath*:*.xml" keine Dateien aus dem Wurzelverzeichnis von jar-Dateien, sondern nur aus dem Wurzel der erweiterten Verzeichnisse.

Wenn Sie dieses Problem lösen, können Sie die Eigenschaften wie folgt laden:

<bean id = "requestProcessorRepository" 
    class = "org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name = "locations" 
        value = "classpath*:somefolder/*requestProcessors.properties" />
</bean>

(Die ursprüngliche Version des Codes war komplexer, aber es gibt keinen Grund dafür, da Spring den Pfad mit Wildcards in Resource[] automatisch).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X