Spring的PropertyPlaceholderConfigurer应用与集成项目properties文件管理

来源:互联网 发布:mac移除应用程序 编辑:程序博客网 时间:2024/06/05 02:50

PropertyPlaceholderConfigurer类就是bean factory post-processor的一种,它的作用是一个资源属性的配置器,能够将BeanFactory的里定义的内容放在一个以.propertis后缀的文件中。因此我们可以继承该类,实现自己定制的properties文件管理。

1、数据库的配置文件jdbc.properties存放数据库账号,密码及地址信息。这些数据直接暴露在外。所以需要对这些数据进行加密,但是使用加密后的数据直接去链接jdbc驱动账号密码不一致。此时我们可以定制该方法在读取的时候将密码解密.

2、初始化的时候。可以指定多个properties文件加载,其中可以包含静态配置文件。例如:短信模板,提示模板等资源数据。都可以进行托管

spring中配置

<bean id="springPropertiesUtil" class="cn.unitedtech.util.SpringPropertiesUtil"><property name="locations"><list><value>classpath:mysql.properties</value><value>classpath:shiro.properties</value><value>classpath:config.properties</value></list></property><property name="fileEncoding" value="UTF-8" /></bean>

代码管理
        private static Map<String, String> propertiesMap;private final Log log = LogFactory.getLog(getClass());private int springSystemPropertiesMode = SYSTEM_PROPERTIES_MODE_FALLBACK;private final String userNameKey = "jdbc.userName";private final String passWordKey = "jdbc.passWord";    @Overridepublic void setSystemPropertiesMode(int systemPropertiesMode) {        super.setSystemPropertiesMode(systemPropertiesMode);        springSystemPropertiesMode = systemPropertiesMode;    }    @Override    protected void processProperties(ConfigurableListableBeanFactory beanFactory, Properties props) throws BeansException {        String userName = props.getProperty(userNameKey);String password = props.getProperty(passWordKey);try {if (StringUtils.isNotEmpty(userName)) {props.setProperty(userNameKey, DESUtil.decrypt(userName));}if (StringUtils.isNotEmpty(password)) {props.setProperty(passWordKey, DESUtil.decrypt(password));}} catch (Exception e) {log.error("decrypt password exception", e);}        propertiesMap = new HashMap<String, String>();        for (Object key : props.keySet()) {            String keyStr = key.toString();            if( null != keyStr && -1 >= keyStr.indexOf("jdbc")  ){            String valueStr = resolvePlaceholder(keyStr, props, springSystemPropertiesMode);            propertiesMap.put(keyStr, valueStr);            }        }                super.processProperties(beanFactory, props);    }    public static String getProperty(String name) {        return propertiesMap.get(name).toString();    }

其中 propertiesMap 存放了非jdbc文件的数据。通过getProperty方法进行读取



0 0
原创粉丝点击