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