Похоже, у вас есть подкласс PropertyPlaceholderConfigurer, почему бы вам не переопределить resolveProperty
с помощью логической проверки значений времени выполнения и в противном случае вернуться к значениям по умолчанию? Возможно, вам придется создать выделенный подкласс для дочернего контекста и добавить в него источник значений времени выполнения.
То, что вы также можете сделать, это поместить значения времени выполнения в свойства системы и использовать режим переопределения для systemPropertiesMode
. Это простое, но не очень чистое решение, некоторые варианты моего первого подхода были бы лучше. Если вы создадите контекстные клиентские контексты, это будет работать до тех пор, пока вы не создадите их параллельно.
обновление: я бы начал с чего-то вроде:
final Map<String,String> myRuntimeValues;
ClassPathXmlApplicationContext childAppContext = new ClassPathXmlApplicationContext(parentApplicationContext) {
protected void prepareBeanFactory(ConfigurableListableBeanFactory beanFactory) {
super.prepareBeanFactory();
beanFactory.registerSingleton("myRuntimeValues", myRuntimeValues);
}
};
и вставьте «myRuntimeValues» в bean-компонент PropertyPlaceholderConfigurer, определенный в файле контекста клиента. Дальнейшее копание может привести к лучшему решению, это не типичный вариант использования, я уверен, вы продвинетесь дальше.