У меня была та же проблема, некоторое время назад, и это был мой способ сделать эту работу:
Во-первых, когда вы boostrap свой контекст Spring Application (я использую конфигурацию на основе аннотаций, но то же должен работать на основе XML) , вы должны добавить пользовательский PropertySource, что позволяет Spring добавлять новый способ разрешения свойств. Что-то вроде этого:
public static void initialize() {
ctx = new AnnotationConfigApplicationContext();
ctx.getEnvironment().getPropertySources().addFirst(new PlayFrameworkPropertySource());
ctx.scan("somepackage");
ctx.refresh();
}
Пользовательский класс PlayFrameworkPropertySource
является тот, который делает волшебство:
public class PlayFrameworkPropertySource extends PropertySource<Object> {
public PlayFrameworkPropertySource() {
super("Play Framework properties resolution mechanism");
}
@Override
public Object getProperty(String propertyName) {
// or ConfigFactory.load().getString(propertyName), as you prefer...
return Configuration.root().getString(propertyName);
}
}
Для того, чтобы все это работало, вам просто нужно сделать еще одну вещь: явно объявить боб типа PropertySourcesPlaceholderConfigurer в некотором @Configuration классе вы могли бы использовать:
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
Важное примечание: этот компонент должен быть static
, так как это BeanFactoryPostProcessor, и он должен быть загружен до любого другого обычного @Bean.
Это работало как очарование для меня, надеюсь, что это поможет кому-то еще!
Приветствия,
Джонатан
Спасибо за это. Это сделал трюк для меня! – Khaleesi