Как обновить значение держателя места свойства Spring после запуска сервера

#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