概要
在使用snakeyaml读取yaml格式的配置文件后,可以将yaml转换为Map;当然你也可以转换为Bean,但是在定义Bean的时候需要按照yaml文件原有层次来定义,这样一旦配置文件改变需要从头更改相应的Bean的结构,会很麻烦。
我们可以将Map转换成Properties的对象,然后适当的重写一下Properties类,让其支持数组即可,如果你的yaml配置文件中没有数组,则可以不用重写。
重写Properties
下面已经将Map转Properties的方法在重写的Properties中实现:
public class QProperties extends Properties {
/**
* 加载有N级层次的map,将其转换为properties
* @param pMap
* @param preKey
*/
public void loadMap(Map pMap,String preKey){
if(pMap != null && pMap.size() > 0){
Set keys = pMap.keySet();
for(String key : keys){
Object value = pMap.get(key);
if(Map.class.isAssignableFrom(value.getClass())){
if(preKey == null || preKey.contentEquals("")){
loadMap((Map) value,(key));
}else{
loadMap((Map) value,(preKey + "." + key));
}
}else{
if(preKey == null || preKey.contentEquals("")){
this.put(key,toString(value));
}else {
this.put(preKey + "." + key,toString(value));
}
}
}
}
}
/**
* 将Map中的value值转成字符串存储
* @param value
* @return
*/
public String toString(Object value){
return String.valueOf(value);
}
}