#spring
#spring
Вопрос:
Мне нужно обновить значение держателя места свойства после запуска сервера из базы данных. Поскольку я использовал пользовательский PropertyPlaceholderConfigurer, расширив подкласс, как показано ниже.
Пользовательский класс PropertyPlaceholderConfigurer:
public class PropertiesSourceImpl extends PropertyPlaceholderConfigurer{
private static final Logger logger = Logger.getLogger(PropertiesSourceImpl.class);
public PropertiesSourceImpl(){ }
private int springSystemPropertiesMode = SYSTEM_PROPERTIES_MODE_OVERRIDE;
private static Map<String, String> propertiesMap;
@Override
public void setSystemPropertiesMode(int systemPropertiesMode) {
String updatedValue = loadFromDB();
System.setProperty("newKey", updatedValue);
super.setSystemPropertiesMode(systemPropertiesMode);
springSystemPropertiesMode = systemPropertiesMode;
}
public void loadProperties(Properties props) throws IOException {
String updatedValue = loadFromDB();
props.setProperty("newKey", updatedValue);
super.loadProperties(props);
propertiesMap = new HashMap<String, String>();
for (Object key : props.keySet()) {
String keyStr = key.toString();
String valueStr = resolvePlaceholder(keyStr, props);
propertiesMap.put(keyStr, valueStr);
}
}
public static String getProperty(String name) {
return propertiesMap.get(name).toString();
}
public void postProcessBeanFactory(BeanFactory factory){
super.postProcessBeanFactory((ConfigurableListableBeanFactory) factory);
}
}
Вот context.xml используется spring 2.5.6
<?xml version="1.0" encoding="UTF-8" ?>
<bean id="commonsUserManagementPropertyConfigurer" class="com.ebreez.utilities.PropertiesSourceImpl" scope="prototype" >
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
<property name="properties">
<props>
<prop key="newKey">no-override</prop>
</props>
</property>
</bean>
<bean name="userManagementService" class="com.ebreez.usermanagement.service.impl.UserManagementServiceImpl"
scope="prototype">
<constructor-arg value="${newKey}" />
</bean>
</beans>
Вот код, в котором значение свойства обновляется без перезапуска сервера:
public class myBean{
public void updatePropertValue(){
Properties props=new Properties();
props.setProperty("newKey", "updatedValue");
PropertyPlaceholderConfigurer configurer = new PropertyPlaceholderConfigurer();
configurer.setProperties(props);
//configurer.setSystemPropertiesMode(springSystemPropertiesMode);
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext(new String[]{"context.xml"}, false);
configurer.setIgnoreUnresolvablePlaceholders(true);
configurer.setSearchSystemEnvironment(false);
//configurer.postProcessBeanFactory(applicationContext.getBeanFactory());
applicationContext.addBeanFactoryPostProcessor(configurer);
applicationContext.refresh();
}
}
Но все равно значение не обновляется в uerManagementServiceImpl.
Пожалуйста, дайте мне знать, что не так в моем коде, чтобы получить обновленное значение, которое будет установлено для держателя места свойства.
Комментарии:
1. И как вы проверяете, было ли обновлено свойство?
2. для проверки значения необходимо добавить getNewKey() в конструктор UserManagementServiceImpl.java