在Spring容器中加载自定义的配置文件

最近做的项目当中遇到这么一个问题,需要将一些参数配置在一个properties文件中,在项目当中动态获取,频繁使用,由于是频繁使用,为了提高性能,我们就想到在项目初始化的时候将其加载到内存里面.
1.
自定义配置文件
配置文件名为:info.properties,内容如下:

del.filter.on=false
domain=http://www.366go.cn/

2修改Spring配置文件
之前代码:

<beanidbeanid="propertyConfigurer"  
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
    <propertynamepropertyname="locations">  
        <list>  
            <value>classpath:info.properties</value>  
        </list>  
    </property>  
</bean> 

修改后的配置文件

<beanidbeanid="propertyConfigurer"  
    class="com.hisun.core.util.CustomizedPropertyPlaceholderConfigurer">  
    <propertynamepropertyname="locations">  
        <list>  
            <value>classpath:info.properties</value>  
            <value>classpath:project.properties</value>  
        </list>  
    </property>  
</bean>  

加入了classpath:project.properties,其为自定义的配置文件
将PropertyPlaceholderConfigurer类修改为自定义类CustomizedPropertyPlaceholderConfigurer,
PropertyPlaceholderConfigurer类的具体作用可以查资料这块儿不做详细介绍
注意下:这个configurer类获取的是所有properties的属性map,如果希望处理某个properties文件,需要在properties中
做一个命名区别,然后在加载的时候,根据key的前缀,进行获取。

定义CustomizedPropertyPlaceholderConfigurer类

importjava.util.HashMap;  
importjava.util.Map;  
importjava.util.Properties;  

importorg.springframework.beans.BeansException;  
importorg.springframework.beans.factory.config.ConfigurableListableBeanFactory;  
importorg.springframework.beans.factory.config.PropertyPlaceholderConfigurer;  

publicclass CustomizedPropertyPlaceholderConfigurer extendsPropertyPlaceholderConfigurer {  
    privatestatic Map ctxPropertiesMap;  

    @Override  
    protectedvoid processProperties(ConfigurableListableBeanFactory beanFactoryToProcess,  
                                     Properties props)throws BeansException {  
        super.processProperties(beanFactoryToProcess, props);  
        ctxPropertiesMap =new HashMap();  
        for(Object key : props.keySet()) {  
            String keyStr = key.toString();  
    if(keyStr.startsWith("project_")){  
           String value = props.getProperty(keyStr);  
           ctxPropertiesMap.put(keyStr, value);  
        }  

        }  
    }  
    publicstatic Object getContextProperty(String name) {  
        returnctxPropertiesMap.get(name);  
    }  
}  

定义获取配置文件中值的类SpringPropertiesUtil

importorg.springframework.beans.BeansException;  
importorg.springframework.context.ApplicationContext;  
importorg.springframework.context.ApplicationContextAware;  
importorg.springframework.stereotype.Component;  

/** 
 * Spring-PropertiesUtil工具类 -获取属性值 
 * 
 */  
@Component  
publicclass SpringPropertiesUtil implementsApplicationContextAware {  
    publicstatic final String KEY = "propertyConfigurer";  
    privatestatic ApplicationContext applicationContext;  

    publicvoid setApplicationContext(ApplicationContext applicationContext)  
            throwsBeansException {  
        SpringPropertiesUtil.applicationContext = applicationContext;  
    }  

    publicstatic ApplicationContext getApplicationContext() {  
        returnapplicationContext;  
    }  

    /** 
     * 获取配置文件中的内容 
     * 
     * @param keyName 
     * @return 
     */  
    publicstatic String parseStr(String keyName) {  
        CustomizedPropertyPlaceholderConfigurer cp = (CustomizedPropertyPlaceholderConfigurer) applicationContext  
                .getBean(KEY);  
        returncp.getContextProperty(keyName).toString();  
    }  

    /** 
     * 获取配置文件中的内容 
     * 
     * @param keyName 
     * @return 
     */  
    publicstatic int parseInt(String keyName) {  
        CustomizedPropertyPlaceholderConfigurer cp = (CustomizedPropertyPlaceholderConfigurer) applicationContext  
                .getBean(KEY);  
        returnInteger.parseInt(cp.getContextProperty(keyName).toString());  
    }  

    /** 
     * 获取配置文件中的内容 
     * 
     * @param keyName 
     * @return 
     */  
    publicstatic double parseDouble(String keyName) {  
        CustomizedPropertyPlaceholderConfigurer cp = (CustomizedPropertyPlaceholderConfigurer) applicationContext  
                .getBean(KEY);  
        returnDouble.parseDouble(cp.getContextProperty(keyName).toString());  
    }  
}  

这样,在项目当中就能够方便快速的获取properties文件中配置的参数
如SpringPropertiesUtil.parseStr(“content”)

转载自http://www.iitshare.com/spring-container-load-custom-configuration-files.html

展开阅读全文

没有更多推荐了,返回首页