2015-11-05 2 views
0

Мои требования приведены ниже: «У нас есть большой файл свойств с использованием Spring, а затем цикл через него. В процессе цикла мы должны проверить самый первый столбец свойств файл для некоторых определенных значений. Как только мы найдем эти значения, мы должны напечатать это значение и продолжить этот процесс печати до самого конца ».Как перегрузить Spring PropertyPlaceholderConfigurer processProperties() метод

Для этого я, наконец, смог построить код, как показано ниже:

import java.util.Map; 
import java.util.Properties; 
import org.springframework.beans.BeansException; 
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; 
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer; 
import org.springframework.context.ApplicationContext; 
import org.springframework.context.ConfigurableApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 

public class SpringPropertiesUtil extends PropertyPlaceholderConfigurer { 

    private static Map<String, String> propertiesMap; 
    private static String keyToFind = "myProperty"; 
    // Default as in PropertyPlaceholderConfigurer 
    private int springSystemPropertiesMode = SYSTEM_PROPERTIES_MODE_FALLBACK; 

    @Override 
    public void setSystemPropertiesMode(int systemPropertiesMode) { 
     super.setSystemPropertiesMode(systemPropertiesMode); 
     springSystemPropertiesMode = systemPropertiesMode; 
    } 

    @Override 
    protected void processProperties(ConfigurableListableBeanFactory beanFactory, Properties props) throws BeansException { 

     super.processProperties(beanFactory, props); 

     for (Object key : props.keySet()) { 
      String keyStr = key.toString();   
      if(keyStr.equals(keyToFind)) { 
      String valueStr = resolvePlaceholder(keyStr, props, springSystemPropertiesMode); 
      System.out.println(valueStr);  
      }   
     } 
    } 

    public String getProperty(String name) { 
     return propertiesMap.get(name).toString(); 
    } 

    public static void main(String[] args) { 

     ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); 

     ((ConfigurableApplicationContext)context).close(); 
    } 

} 

Он работает нормально, но я нахожу более хороший способ сделать это, если я могу перегрузить processProperties() и может передавать Струнный keyTofind к этот метод, а не определение его в глобальном масштабе. Любые предложения приветствуются.

Спасибо.

ответ

0

В качестве альтернативы вашему решению вы можете реализовать собственный источник свойств. Я считаю, что это механизм Spring, предназначенный для запатентованной «логики синтаксического анализа исходного кода».

Тема не очень хорошо документирована в Интернете, но эта статья дает некоторое представление: http://scottfrederick.cfapps.io/blog/2012/05/22/Custom-PropertySource-in-Spring-3.1---Part-1/

Смежные вопросы