Могу ли я использовать Spring util:properties и context:property-placeholder вместе?

У меня есть следующая конфигурация в Spring applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context.xsd
           http://www.springframework.org/schema/util 
           http://www.springframework.org/schema/util/spring-util.xsd">

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

    <context:property-placeholder location="file:///absolute/path/to/bar.properties"/>
    <util:properties id="baz" location="file:///absolute/path/to/bar.properties"/>

Я могу поставить точки останова отладки там, где загружаются файлы свойств, и увидеть, что значения файлов свойств действительно загружены.

Но в моем bean-компоненте @Value("#{baz.myProp}") разрешается, тогда как @Value("${myProp}") взрывается в PropertyPlaceholderHelper, так как PropertySourcesPropertyResolver не может найти myProp:

DEBUG [...] - Searching for key 'myProp' in [environmentProperties]
DEBUG [...] - Searching for key 'myProp' in [systemProperties]
DEBUG [...] - Searching for key 'myProp' in [systemEnvironment]
DEBUG [...] - Could not find key 'myProp' in any property source. Returning [null]
DEBUG [...] - Searching for key 'myProp' in [localProperties]
DEBUG [...] - Could not find key 'myProp' in any property source. Returning [null]

Почему это так и как я могу заставить его работать (используя разрешение заполнителя свойства $ вместо синтаксиса # SpEL)?

Будут ли свойства, загруженные через context:property-placeholder, отбрасываться/перезаписываться util:properties (доступным только через ссылку baz)?


person Christian    schedule 09.10.2017    source источник


Ответы (1)


Оказывается, это все, что нужно сделать в каждой из строк context:property-placeholder, чтобы дать каждой из них возможность принять участие в решении свойство: ignore-unresolvable="true"...

person Christian    schedule 09.10.2017
comment
Не делайте этого (поскольку вы, вероятно, пропустите важные исключения). Используйте один property-placeholder со списком местоположений, разделенным запятыми. - person M. Deinum; 09.10.2017