Access properties file programmatically with Spring?

前端 未结 15 1677
说谎
说谎 2020-11-27 09:37

We use the code below to inject Spring beans with properties from a properties file.



        
15条回答
  •  孤城傲影
    2020-11-27 09:37

    CREDIT: Programmatic access to properties in Spring without re-reading the properties file

    I've found a nice implementation of accessing the properties programmatically in spring without reloading the same properties that spring has already loaded. [Also, It is not required to hardcode the property file location in the source]

    With these changes, the code looks cleaner & more maintainable.

    The concept is pretty simple. Just extend the spring default property placeholder (PropertyPlaceholderConfigurer) and capture the properties it loads in the local variable

    public class SpringPropertiesUtil extends PropertyPlaceholderConfigurer {
    
        private static Map propertiesMap;
        // 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);
    
            propertiesMap = new HashMap();
            for (Object key : props.keySet()) {
                String keyStr = key.toString();
                String valueStr = resolvePlaceholder(keyStr, props, springSystemPropertiesMode);
                propertiesMap.put(keyStr, valueStr);
            }
        }
    
        public static String getProperty(String name) {
            return propertiesMap.get(name).toString();
        }
    
    }
    

    Usage Example

    SpringPropertiesUtil.getProperty("myProperty")
    

    Spring configuration changes

    
        
        
        
            classpath:myproperties.properties
        
        
    
    

    Hope this helps to solve the problems you have

提交回复
热议问题