Java读取properties文件(非泛滥)

时间:2021-05-24 16:30:05

根据spring配置文件的 PropertiesFactoryBean和 PropertyPlaceholderConfigurer可以选择不同的加载方式,我是使用System.setProperty(key, value),代码中可以直接用System.getProperty(key)取value的值

一、PropertyPlaceholderConfigurer

PropertyPlaceholderConfigurer是解决 properties 文件占位符问题,实现 PropertiesLoaderSupport 类

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:jdbc.properties</value>
<value>classpath:redis.properties</value>
</list>
</property>
<!-- 忽略不可解析的 -->
<property name="ignoreUnresolvablePlaceholders" value="true" />
</bean>
package com.phil.common.prop;

import java.util.Map.Entry;
import java.util.Properties; import org.apache.log4j.Logger;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component; /**
* 加载Properties文件
* @author phil
* @date 2017年8月13日
*
*/
@Component
public class InitializingProperties implements InitializingBean { private static final Logger logger = Logger.getLogger(InitializingProperties.class); /*
* (non-Javadoc)
*
* @see
* org.springframework.beans.factory.InitializingBean#afterPropertiesSet()
*/
@Override
public void afterPropertiesSet() throws Exception {
Properties props = new Properties();
props.load(InitializingProperties.class.getClassLoader().getResourceAsStream("test1.properties"));
props.load(InitializingProperties.class.getClassLoader().getResourceAsStream("test2.properties"));
for (Entry<Object, Object> e : props.entrySet()) {
System.setProperty(e.getKey().toString(), e.getValue().toString());
logger.info(e.getKey().toString() + "---" + e.getValue().toString());
}
}
}

二、PropertiesFactoryBean

PropertiesFactoryBean 是PropertiesLoaderSupport 直接的实现类

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="location">
<value>classpath:portal_dev.properties</value>
</property>
</bean>
package com.phil.common.prop;

import java.util.Map.Entry;
import java.util.Properties; import org.apache.log4j.Logger;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; /**
* 加载Properties文件
* @author phil
* @date 2017年8月13日
*
*/
@Component
public class InitializingProperties implements InitializingBean { private static final Logger logger = Logger.getLogger(InitializingProperties.class); @Autowired
private Properties propertyConfigurer; /*
* (non-Javadoc)
*
* @see
* org.springframework.beans.factory.InitializingBean#afterPropertiesSet()
*/
@Override
public void afterPropertiesSet() throws Exception {
for (Entry<Object, Object> e : propertyConfigurer.entrySet()) {
System.setProperty(e.getKey().toString(), e.getValue().toString());
logger.info(e.getKey().toString() + "---" + e.getValue().toString());
}
}
}