Создайте файл 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 см.:
- SnakeYAML JAVA использует SnakeYAML для разбора и сериализации YAML
- Java реализует данные yaml в json и карту
- Преобразование операции Java между yaml и json
Основные два метода:
- 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"
}
}
}