весна <util: properties /> с подстановочными знаками - PullRequest
4 голосов
/ 25 октября 2010

Я хотел бы загрузить пары ключ-значение из нескольких мест.Моим первым предположением было:

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

, но оно недопустимо

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

Без подстановочных знаков оно начинает работать.

Так что любые другие возможности для создания свойствобъект / карта из подстановочных файлов?

1 Ответ

8 голосов
/ 25 октября 2010

Прежде всего, ваш ресурсный путь classpath*:*requestProcessors.properties не надежен (из Spring Reference ):

Обратите внимание, что "classpath *:" когда в сочетании с узорами в стиле муравья надежно работать только с одним корневой каталог перед шаблоном запускается, если только фактические целевые файлы проживать в файловой системе. Это означает что шаблон как "classpath *: *. xml" не получит файлы из корня файлов JAR, а скорее только из корень расширенных каталогов.

Если вы решите эту проблему, вы можете загрузить свойства следующим образом:

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

(Исходная версия кода была более сложной, но в этом нет необходимости, поскольку Spring автоматически преобразует путь с подстановочными знаками в Resource[]).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...