Yml文件的写入和读取

Author: Lijb

Email: lijb1121@163.com

导入依赖

<dependency>
    <groupId>org.jyaml</groupId>
    <artifactId>jyaml</artifactId>
    <version>1.3</version>
</dependency>

生成yml文件格式

--- !com.neunn.monitor.web.utils.generates.rulesbean.Generates
groups: !com.neunn.monitor.web.utils.generates.rulesbean.Groups
  name: redis
  rules:
    - !com.neunn.monitor.web.utils.generates.rulesbean.Rules
      alert: redis Down
      annotations: !com.neunn.monitor.web.utils.generates.rulesbean.Annotations
        description: "{{ $labels.instance }} ---- {{ $labels.job }} Down 时间超过5s."
        summary: "Instance{{ $labels.instance }} down"
      expr: redis_up == 0
      fors: 5s
      labels: !com.neunn.monitor.web.utils.generates.rulesbean.Labels
        metricType: 1
        severity: red

Bean

public class Generates {
    private Groups groups;
}

public class Groups {
    private String name;
    private List<Rules> rules;
}

public class Rules {
    private String alert;
    private String expr;
    private String fors;
    private Labels labels;
    private Annotations annotations;
}

public class Labels {
    private String severity;
    private int metricType;
}

public class Annotations {
    private String summary;
    private String description;
}
//省略get/set方法

代码(demo)

数据时写死的假数据,yml中的数据是来自数据库的

本次业务场景:最终返回给调用者的是String字符串

考虑一个请求完成生成临时文件+读取文件格式并返回字符串,设计成AOP环绕通知

package com.neunn.monitor.web.utils.generates;

import com.neunn.monitor.web.utils.generates.rulesbean.*;
import org.ho.yaml.Yaml;
import org.junit.Test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

/**
 * 动态生成yml文件内容测试
 * [@author](https://my.oschina.net/arthor) lijb
 * [@company](https://my.oschina.net/u/3478402) 东网
 * [@date](https://my.oschina.net/u/2504391) 2019-01-08
 */


public class GenerateYml {
    //写入yaml配置文件
    [@Test](https://my.oschina.net/azibug)
    public void writeYml() {
         //初始化数据,未来数据是从数据库查出来的

        //labels
        Labels labels = new Labels();
        labels.setSeverity("red");
        labels.setMetricType(1);

        //annotations
        Annotations annotations = new Annotations();
        annotations.setSummary("Instance{{ $labels.instance }} down");
        annotations.setDescription("{{ $labels.instance }} ---- {{ $labels.job }} Down 时间超过5s.");

        //rules
        Rules rules = new Rules();
        rules.setAlert("redis Down");
        rules.setExpr("redis_up == 0");
        rules.setFors("5s");
        rules.setLabels(labels);
        rules.setAnnotations(annotations);

        List<Rules> rulesList=new ArrayList<>();
        rulesList.add(rules);

        //groups
        Groups groups = new Groups();
        groups.setRules(rulesList);
        groups.setName("redis");
        //Generates
        Generates generates= new Generates();
        generates.setGroups(groups);
        File dumpFile = new File(System.getProperty("user.dir")+"/src/com/neunn/monitor/web/utils/generates/ymlfiles/testYaml.yml");
        try {
            Yaml.dump(generates, dumpFile);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }


    //读yml文件
    @Test
    public void readYml(){
        File file = new File(System.getProperty("user.dir"), "/src/com/neunn/monitor/web/utils/generates/ymlfiles/testYaml.yml");
        try {
            // 读取文件内容 (输入流)
            FileInputStream out = new FileInputStream(file);
            InputStreamReader isr = new InputStreamReader(out);
            int ch = 0;
            StringBuilder stringBuilder = new StringBuilder();
            while ((ch = isr.read()) != -1) {
                stringBuilder.append((char) ch);
            }

            System.out.println(stringBuilder);
        } catch (Exception e) {
            // TODO: handle exception
        }
    }

}

读到的格式

--- !com.neunn.monitor.web.utils.generates.rulesbean.Generates
groups: !com.neunn.monitor.web.utils.generates.rulesbean.Groups
  name: redis
  rules: 
    - !com.neunn.monitor.web.utils.generates.rulesbean.Rules
      alert: redis Down
      annotations: !com.neunn.monitor.web.utils.generates.rulesbean.Annotations
        description: "{{ $labels.instance }} ---- {{ $labels.job }} Down 时间超过5s."
        summary: "Instance{{ $labels.instance }} down"
      expr: redis_up == 0
      fors: 5s
      labels: !com.neunn.monitor.web.utils.generates.rulesbean.Labels
        metricType: 1
        severity: red

转载于:https://my.oschina.net/u/3991887/blog/2999417

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值