В моем приложении я использую SpringBoot и Spring Batch (и admin). Я также использую файл application.yaml для хранения всех необходимых мне свойств. У меня возникли проблемы с Properties, потому что в SpringBatchAdmin создан PropertyPlaceholderConfigurer
компонент, который имеет флаг ignoreUnresolvablePlaceholders
, установленный в false
. Вот вышеупомянутая боб:IllegalArgumentException с Spring PropertyPlaceholderConfigurer properties flag
<bean id="placeholderProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:/org/springframework/batch/admin/bootstrap/batch.properties</value>
<value>classpath:batch-default.properties</value>
<value>classpath:batch-${ENVIRONMENT:hsql}.properties</value>
</list>
</property>
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
<property name="ignoreResourceNotFound" value="true" />
<property name="ignoreUnresolvablePlaceholders" value="false" />
<property name="order" value="1" />
</bean>
Моя проблема заключается в том, что в настоящее время пружинные поиски в этих 3 файлов, чтобы прочитать все свойства, которые извлекаются с помощью @Value
аннотацию. Итак, что происходит, так это то, что у меня есть другие зависимости, которые объявили свои собственные свойства, и Spring заставляет меня помещать эти свойства в один из трех файлов, объявленных в компоненте PropertyPlaceholderConfigurer
, созданном в SpringBatchAdmin.
Так, например, следующий класс/боб:
@Component
public class Example{
@Value("${find.me}")
private String findMe;
...
}
придется искать в следующих 3-х файлов:
batch.properties
batch-default.properties
batch-sqlserver.properties
и если свойство find.me
не в одном из них файлов, то я получаю следующее исключение:
java.lang.IllegalArgumentException: Could not resolve placeholder 'find.me' in string value "${find.me}"
Я хочу добавить, что проблема НЕ исходит от использования yaml или Spring, не обнаруживая свойство find.me, поскольку, если я не использую SpringBatchAdmin, который создает PropertyPlaceholderConfigurer
, свойство «find.me» эффективно находится в моем файле application.yaml
.
Кроме того, я не могу изменить вопрос PropertyPlaceholderConfigurer
, потому что он исходит из внешнего источника (не моего, а SpringBatchAdmin).
Как я могу это решить?