Yaml | Практические занятия с нуля (Java)

Java

Создайте файл yaml в IDEA

Источник ссылки:Идея решения не поддерживает yml-файл SpringBoot

Idea не распознает файлы yml (yaml) по умолчанию и не предлагает файлы yml, поэтому требуется некоторая настройка.

  • Строка меню: Настройки -> Плагины -> YAML. В Idea по умолчанию установлен плагин YAML.
  • Добавьте два плагинах:
    • YAML/Ansible support
    • SnakeYAML plugin

После добавления двух подключаемых модулей Idea может распознать файл yml и запросить. Если вам нужно добавить файл yml в качестве системного файла SpringBoot, вам необходимо обратиться кSpringBoot — добавить yml в качестве системного файла.

Когда в проекте весенней загрузки существуют файлы application.properties и application.yml, оба файла допустимы, но приоритет application.properties будет выше, чем у application.yml.

писать и читать файлы yaml

написать yaml-файл

Для проектов SpringBoot созданные файлы yml обычно помещаются вresourcesфайл, например E:\Code\projectname\src\main\resources\conf.yml.

Запишите данные в соответствии с синтаксисом файла yaml:

http:
  request:
    headers:
      tabValue:
        httpRequestHeaders
      type:
        plaintext
    body:
      tabValue:
        httpRequestBody
      type:
        plaintext

Примечание: файлы yaml разрешено использовать толькокосмосИерархия управления, вкладки не допускаются.

читать yaml-файл

Источник ссылки:Несколько способов чтения файлов/путей ресурсов в Java

Обычно используются эти два способа:

import org.yaml.snakeyaml.Yaml;
Yaml yaml = new Yaml();
confName = "conf.yml";

//获取文件路径,如 E:\Code\projectname\src\main\resources\conf.yml
String fileName = this.getClass().getClassLoader().getResource(confName).getPath();
yaml.load(fileName)

//直接读取yaml文件为InputStream
//注:InputStream需要用try{}catch{}处理异常,这里省略了
InputStream input = this.getClass().getClassLoader().getResourceAsStream(confName);
yaml.load(input)

Используйте SnakeYaml для управления файлами yaml

Получите последние зависимости maven на веб-сайте SnakeYaml.

<!--引入snakeyaml包,处理yaml配置文件-->
<dependency>
    <groupId>org.yaml</groupId>
    <artifactId>snakeyaml</artifactId>
    <version>1.26</version>
</dependency>

Для конкретного использования SnakeYaml см.:

Основные два метода:

  • load(): загрузить файл yaml как объект. по умолчанию. Метод load возвращает объект Map. SnakeYAML поддерживает загрузку документов из String или InputStream.
  • dump(): сериализовать объект или pojo в yml.

[Примечание] Следующие два формата данных yaml можно преобразовать в json.

(1) Формат данных yaml по умолчанию обычно пишется от руки.

http:
  request:
    headers:
      tabValue:
        httpRequestHeaders
      type:
        plaintext
    body:
      tabValue:
        httpRequestBody
      type:
        plaintext

(2) При использовании yaml.dump() для записи файла yaml будет создан следующий формат данных.

http:
  request:
    headers: {tabValue: httpRequestHeaders, type: plaintext}
    body: {tabValue: httpRequestBody, type: plaintext}

Кодекс Практика

  • Прочитайте файл yml в папке ресурсов в проекте SpringBoot, запишите его в базу данных и прочитайте из базы данных.
  • Прочитайте файл yml напрямую
  • Преобразование прочитанных данных файла yml в json

(1) Прочитайте файл yml в папке ресурсов в проекте SpringBoot, запишите его в базу данных, а затем прочитайте из базы данных.

import org.yaml.snakeyaml.Yaml;

/**
 * 将yaml配置文件的内容加载为yaml写入数据库
 * */
public void writeConf(String confName) {
    InputStream input = null;
    try {
        input = this.getClass().getClassLoader().getResourceAsStream(confName);
    } catch (Exception e){
        //
    }

    //加载配置文件内容为yaml
    Yaml yaml = new Yaml();
    String contentYaml = yaml.dump(yaml.load(input));

    Conf conf = new Conf();
    conf.setConfName(hisnifferConf);
    conf.setContent(contentYaml);
    confMapper.insert(conf);
}

/**
 * 从数据库读取yml配置文件
 * @param confName 配置文件名称
 * @return yaml类型的字符串
 * 注:配置文件名唯一,返回的结果也是唯一的
 * */
public String readConfFromDb(String confName){
    ConfExample example = new ConfExample();
    ConfExample.Criteria criteria = example.createCriteria();
    if (!StringUtils.isEmpty(confName) ){
        criteria.andConfNameEqualTo(confName);
    }
    List<Conf> list = confMapper.selectByExampleWithBLOBs(example);
    if (ListUtil.isEmpty(list)) {
        throw new BaseRuntimeException(ResultCode.PARAM_ILLEGAL.modifyMessage("配置文件找不到:confName=" + confName));
    }
    return list.get(0).getContent();
}

(2) Непосредственно прочитать файл yml

/**
 * 直接读取yml配置文件
 * @param confName 配置文件名称 (从全局配置环境中读取)
 * @return yaml的InputStream
 * */
public InputStream readConfFromYaml(String confName){
    InputStream input = null;
    try {
        input = this.getClass().getClassLoader().getResourceAsStream(confName);
    } catch (Exception e){
        //
    }
    return input;
}

(3) Преобразуйте прочитанные данные файла yml в json

Примечание. Пока переменная, полученная yaml.load(), является объектом, загруженные данные будут автоматически располагаться в соответствии с этим объектом.

confName = "conf.yml";

Map<String,Object> mapDb = (Map<String, Object>) yaml.load(readConfFromDb(confName));
Map<String,Object> mapYaml = (Map<String, Object>) yaml.load(readConfFromYaml(confName));

Вернуть формат данных json:

"http":{
  "request":{
    "headers":{
      "tabValue":"httpRequestHeaders",
      "type":"plaintext"
    },
    "body":{
      "tabValue":"httpRequestBody",
      "type":"plaintext"
    }
  }
}