Jfinal读取Yaml配置文件

1.添加依赖

<dependency>
  <groupId>org.yaml</groupId>
  <artifactId>snakeyaml</artifactId>
  <version>1.24</version>
</dependency>

2.新建自定义Prop类

package cn.flyinke.test;
import com.jfinal.kit.Prop;
import org.yaml.snakeyaml.Yaml;

import java.io.InputStream;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Properties;

/**
 * @author flyinke
 * @time 2019-04-14
 * @description
 */
public class YamlProp extends Prop {


    public YamlProp(String yamlFile) {
        setYaml(yamlFile);
    }

    private void setYaml(String yamlFile){
        LinkedHashMap map = null;
        Properties properties = new Properties();
        InputStream in = null;
        try {
            Yaml yaml = new Yaml();
            in = YamlProp.class.getClassLoader().getResourceAsStream(yamlFile);
            map = yaml.loadAs(in, LinkedHashMap.class);
        } catch (Exception e) {
            e.printStackTrace();
        }
        setProperties(properties,map,"");
        this.properties = properties;
    }

    private static void setProperties(Properties properties, Map map, String prefix) {
        for (Object key :map.keySet()){
            Object value = map.get(key);
            if(key == null){
                continue;
            }
            if(value instanceof Map){
                setProperties(properties, (Map) value,prefix+key.toString()+".");
            }else {
                if(value == null){
                    continue;
                }
                //System.out.println(prefix+key.toString()+"="+value.toString());
                properties.setProperty(prefix+key.toString(),value.toString());
            }
        }
    }
}

3. JfinalConfig文件中设置下

private static Prop p = loadConfig();

private static Prop loadConfig() {
    return PropKit.append(new YamlProp("application-local.yml"));
}

4. 完成

评论区

JFinal

2019-04-17 15:02

简洁方便,必赞

BTMTimor

2020-08-13 20:50

加载时会:java.io.IOException: Stream closed,不知道咋回事

热门分享

扫码入社