读取Yaml配置文件及Properties配置文件

读Yaml文件

所需依赖

// yml依赖
<dependency>
   <groupId>org.yaml</groupId>
   <artifactId>snakeyaml</artifactId>
   <version>1.26</version>
</dependency>

工具类

import java.io.FileInputStream;
import java.io.IOException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import org.yaml.snakeyaml.Yaml;


public class YamlConf {
	//存储配置属性的Map集合
    private static Map<String, Object> conf = new HashMap<String, Object>();


    public static void init()throws IOException{
        //从classpath下获取配置文件路径
        URL url = YamlConf.class.getResource("/cluster.yml");
        Yaml yaml = new Yaml();
        //通过yaml对象将配置文件的输入流转换成map原始map对象
        Map map = yaml.loadAs(new FileInputStream(url.getPath()), Map.class);
        // 也可以这么读
        //Map map = yaml.loadAs(new FileInputStream(new File("src/main/resources/cluster.yml")), Map.class);
        
        //递归map对象将配置加载到conf对象中
        loadRecursion(map, "");
    }

    public static Object get(String key)throws Exception{
        if (conf.size() == 0){
            throw new Exception("未初始化,未找到配置数据项!");
        }
        return conf.get(key);
    }

    /**
       在使用过程中发现此处有个bug,做了修改,这是修改后的
       代码
    */
    //递归解析map对象
    public static void loadRecursion(Map<String, Object> map, String key){
        map.forEach((k,v) -> {
            if(isParent(v)){
                if (!(v instanceof Boolean)){
                    Map<String, Object> nextValue = (Map<String, Object>) v;
                    loadRecursion(nextValue, (("".equals(key) ? "" : key + ".")+ k));
                }else {
                    conf.put(key+"."+k,v);
                }
            }else{
                conf.put(key+"."+k,v);
            }
        });
    }
	
	//判断是否还有子节点
    public static boolean isParent(Object o){
        if (!(o instanceof String || o instanceof Character || o instanceof Byte)) {
            try {
                Number n = (Number) o;
            } catch (Exception e) {
                return true;
            }
        }
        return false;
    }

	public static void main(String[] args) throws Exception{
        YamlConf.init();
        // 可以愉快的读取了
        YamlConf.get("xx.xx.xxx");
    }
}

读Properties文件

不需要单独引依赖

// 读取classpath下配置
import jodd.util.PropertiesUtil;

Properties props = PropertiesUtil.createFromFile("src/main/resources/jdbc.properties");
props.getProperty("hive_initialSize") // 取值

参考:
https://blog.csdn.net/hexiaodiao/article/details/86695664?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.nonecase

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值