2015-11-05 2 views
1

У меня здесь немного сложность. Я разрабатываю утилиту, для которой мне требуется возможность использования контекста Spring в качестве параметров командной строки. Это было легко сделать:Использование свойств PropertyPlaceholderConfigurer и PropertySource

if (args != null && args.length > 0) { 
    PropertySource<?> ps = new SimpleCommandLinePropertySource(args); 
    ctx.getEnvironment().getPropertySources().addFirst(ps); 
} 

Что у меня есть проблема с следующим шаг: чтобы быть совместимыми с моими рамками предприятия, я должен установить PropertyPlaceholderConfigurer они обеспечивают . Легко сделано тоже.

@Bean 
public PropertyPlaceholderConfigurer propertyPlaceholderConfigurer() { 
    return new MyPropertyPlaceholderConfigurer(); 
} 

Дело в том, когда последний установлен, что ранее работал с командной строки нет, и у меня есть ошибки:

java.lang.IllegalArgumentException: Не удалось решить заполнитель «input.file» в значение строки «$ {input.file}»

Теперь, я знаю, используя как далеко от идеала (и в идеале, я бы даже не использовать PropertyPlaceholderConfigurer, а скорее PropertySourcesPlaceholderConfigurer). Тем не менее, у меня нет выбора в настройщике.

Как следствие, я думаю, что должен что-то изменить с помощью своего PropertySource, но я в недоумении, как я могу это сделать элегантным способом. Должен ли я продлить PropertyPlaceholderConfigurer, чтобы добавить PropertySource? Возможно ли это?

Какое оптимальное решение для этого? Даже смутные вести приветствуются, поскольку я не знаю, в каком направлении идти.

(весна версия: 4.1.6)


1. Это PropertyPlaceholderConfigurer загружает некоторые файлы свойств и применить некоторую дополнительную обработку (например, чтобы зашифрованные значения в файлах свойств).

ответ

0

С

ctx.getEnvironment().getPropertySources().addFirst(ps); 

вы идете правильным путем.

Я думаю, что ваш MyPropertyPlaceholderConfigurer (из этого Enterprise Framework) не только совместим с PropertySourcesPlaceholderConfigurer.

Вы должны взглянуть на их код и переопределить его для расширения PropertySourcesPlaceholderConfigurer.

С другой стороны PlaceholderConfigurerSupport является BeanFactoryPostProcessor и эти ребята должны быть сконфигурированы как статических@Bean с.

HTH

+0

AddFirst, кажется, игнорируется из-за конфигурации. Я надеялся избежать перезаписи кода фреймворка, но я думаю, что это единственный способ. Встреча с некоторыми проблемами (кажется, они продали мне мечту), но ваш ответ отвечает моим мыслям. – Chop

Смежные вопросы