开发中,常常有些参数需要放在配置文件中,
简单的使用是使用注解来进行注入,
properties文件中
author_name=luolin
project_info=\u8BE5\u9879\u76EE\u4E3B\u8981\u662F\u7528\u4E8E\u5199\u4E00\u4E9Bdemo
xml中:
<bean id="setting" class="com.ycgwl.kylin.spring.properties.PropertiesFactoryBean">
<property name="fileEncoding" value="UTF-8" />
<property name="ignoreResourceNotFound" value="true" />
<property name="locations">
<list>
<value>classpath:conf/application.properties</value>
<value>classpath:conf/application.dev.properties</value>
</list>
</property>
</bean>
在使用的使用通过value注解进行注入
@Value("#{setting[author_name]}")
private String authorName;
@Value("#{setting[project_info]}")
private String projectInfo;
简单的说,第一步就是把配置文件生成一个bean,id为setting.在使用的时候注入进来;
第一种很明显是能够满足我们使用的,但是,个人感觉比较高大上的使用方法是使用spring的自定义加载过程来实现该过程:
通过SystemUtils来管理配置文件的属性,而属性的key值放入SystemKey中
public class SystemUtils {
public static final String SEPARATOR = "/";
private static final Map<String, String> properties = new ConcurrentHashMap<String, String>();
/**
* @Description: 新增配置项
* @param key
* @param value
* @exception
*/
public static void put(String key,String value){
properties.put(key, value);
}
/**
* @Description: 获取某配置项
* @param key
* @return
* @exception
*/
public static String get(String key){
return properties.get(key);
}
}
public interface SystemKey {
String NAME = "author_name";
String PROJECT = "project_info"
}
然后在spring的加载过程中,将属性保存在SystemUtils中的map集合中
public class PropertiesFactoryBean extends org.springframework.beans.factory.config.PropertiesFactoryBean {
private final Logger logger = LoggerFactory.getLogger(PropertiesFactoryBean.class);
@Override
protected void loadProperties(Properties props) throws IOException {
super.loadProperties(props);
logger.info("系统配置信息如下:");
logger.info("=============================================================================================");
if(MapUtils.isEmpty(props)){
logger.info("没有任何配置信息");
}else{
for (Map.Entry<Object, Object> entry : props.entrySet()) {
SystemUtils.put(String.valueOf(entry.getKey()), String.valueOf(entry.getValue()));
logger.info("{} = {}", entry.getKey(), entry.getValue());
}
}
logger.info("=============================================================================================");
}
}
当spring启动时,会把配置文件的属性放入SystemUtils中,当需要使用某一个属性的时候可以直接使用SystemUtils.get(SystemKey.NAME )即可获取name的属性;
比加注解方便许多,在分布式的系统中,使用ConcurrentHashMap,可以防止一些并发问题,如果单系统中,可以使用HashMap就好;第一种方法网上较多,第二种暂时没有在网上查到,如果手敲代码可以先理解下就可以正常使用.