Java中针对Yaml格式数据操作记录
写在前面
最近由于涉及的功能需要对Nacos配置信息通过代码实现发布,在此过程中,涉及到String字符串转换Map,Map转换为Yaml格式的字符串等方法,由于之前没有接触过此方面内容,所以特在此进行记录,以做备忘!
1、Nacos获取配置
Nacos获取配置信息,返回结果为String格式字符串,这里可以参看Nacos中文文档(地址为:https://nacos.io/zh-cn/docs/sdk.html )中Java SDK提供的方法,具体如下:
try {
String serverAddr = "{serverAddr}";
String namespace = "{namespace}";
String dataId = "{dataId}";
String group = "{group}";
Properties properties = new Properties();
properties.put("serverAddr", serverAddr);
properties.put("namespace", namespace);
ConfigService configService = NacosFactory.createConfigService(properties);
String content = configService.getConfig(dataId, group, 5000);
System.out.println(content);
} catch (NacosException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
由于Nacos配置信息为Yaml格式,简略信息如下:
对于Nacos配置操作时,需要修改相关配置,因此需要将String格式转换为Map格式操作,此时,对应的Yaml操作如下:
1> Maven项目中导入pom依赖
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>1.26</version>
</dependency>
2> 使用Yaml方法操作,具体方法如下:
Yaml yaml = new Yaml();
//将Nacos配置信息content字符串转成 Map形式
Map<String,Object> map = yaml.load(content);
2、Nacos发布配置
Nacos发布配置,需要将之前修改的Map格式的配置信息,转换为String格式进行发布,具体方法同样可以参看Nacos中文文档中Java SDK中的方法,具体如下:
说明:由于Nacos配置格式为Yaml格式,这里nacos-client对应的依赖版本为1.4.1及以上版本,文档信息如下:
这里的type变量定义,可以参看下面定义方式:
private final String type = ConfigType.YAML.getType();
Nacos配置发布方法如下:
try { // 初始化配置服务,控制台通过示例代码自动获取下面参数 String serverAddr = "{serverAddr}";
String namespace = "{namespace}"; String dataId = "{dataId}"; String group = "{group}"; Properties properties = new Properties(); properties.put("serverAddr", serverAddr); properties.put("namespace", namespace); ConfigService configService = NacosFactory.createConfigService(properties); boolean isPublishOk = configService.publishConfig(dataId, group, "content", type); System.out.println(isPublishOk); } catch (NacosException e) { // TODO Auto-generated catch block e.printStackTrace(); }
如上方法可见,发布配置内容为String 字符串格式,所以需要将Map格式转换为String格式,其中String格式内容需要按照Yaml格式展示,这里涉及到的方法如下:
Yaml yaml = new Yaml();
//将Map转换成 YAML 字符串
String yamlStr = yaml.dumpAsMap(map);
3、效果展示
**************************************************** 林深时见鹿,海蓝时见鲸 ****************************************************