yaml读取和解析太麻烦,转换成JSON、MAP、Properties等处理就方便很多!
<dependency>
<groupId>com.fasterxml.jackson.dataformatgroupId>
<artifactId>jackson-dataformat-yamlartifactId>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformatgroupId>
<artifactId>jackson-dataformat-propertiesartifactId>
dependency>
import java.io.IOException;
import java.util.Map;
import java.util.Properties;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.dataformat.javaprop.JavaPropsMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLMapper;
/**
*
* yaml转换工具
*
* @author 00fly
* @version [版本号, 2023年4月25日]
* @see [相关类/方法]
* @since [产品/模块版本]
*/
public final class YamlUtils
{
private static YAMLMapper yamlMapper = new YAMLMapper();
private static JavaPropsMapper javaPropsMapper = new JavaPropsMapper();
private YamlUtils()
{
super();
}
/**
* yaml转properties
*
* @param yamlContent
* @return
* @throws IOException
*/
public static Properties yamlToProperties(String yamlContent)
throws IOException
{
JsonNode jsonNode = yamlMapper.readTree(yamlContent);
return javaPropsMapper.writeValueAsProperties(jsonNode);
}
/**
* yaml转Map
*
* @param yamlContent
* @return
* @throws IOException
*/
public static Map<String, String> yamlToMap(String yamlContent)
throws IOException
{
JsonNode jsonNode = yamlMapper.readTree(yamlContent);
return javaPropsMapper.writeValueAsMap(jsonNode);
}
/**
* yaml转properties字符串
*
* @param yamlContent
* @return
* @throws JsonMappingException
* @throws JsonProcessingException
*/
public static String yamlToPropText(String yamlContent)
throws JsonMappingException, JsonProcessingException
{
JsonNode jsonNode = yamlMapper.readTree(yamlContent);
return javaPropsMapper.writeValueAsString(jsonNode);
}
/**
* yaml转Json字符串
*
* @param yamlContent
* @return
* @throws JsonMappingException
* @throws JsonProcessingException
*/
public static String yamlToJson(String yamlContent)
throws JsonMappingException, JsonProcessingException
{
JsonNode jsonNode = yamlMapper.readTree(yamlContent);
return jsonNode.toPrettyString();
}
}
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Map;
import java.util.Properties;
import org.apache.commons.io.FileUtils;
import org.junit.Before;
import org.junit.Test;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.util.DefaultPropertiesPersister;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class YamlUtilsTest
{
String yamlContent;
@Before
public void setup()
{
try
{
Resource resource = new ClassPathResource("application.yml");
yamlContent = FileUtils.readFileToString(resource.getFile(), StandardCharsets.UTF_8.toString());
}
catch (IOException e)
{
log.error(e.getMessage(), e);
}
}
@Test
public void yamlToPropertiesTest()
throws IOException
{
Properties properties = YamlUtils.yamlToProperties(yamlContent);
log.info("yamlToProperties: {}", properties);
}
@Test
public void yamlToPropertiesTest2()
throws IOException
{
// yaml->String->Properties
String propText = YamlUtils.yamlToPropText(yamlContent);
DefaultPropertiesPersister propertiesPersister = new DefaultPropertiesPersister();
Properties props = new Properties();
propertiesPersister.load(props, new ByteArrayInputStream(propText.getBytes()));
log.info("yamlToProperties: {}", props);
}
@Test
public void yamlToMap()
throws IOException
{
Map<String, String> map = YamlUtils.yamlToMap(yamlContent);
log.info("yamlToMap: {}", map);
}
@Test
public void yamlToPropText()
throws IOException
{
String text = YamlUtils.yamlToPropText(yamlContent);
log.info("yamlToPropText: {}", text);
}
@Test
public void yamlToJson()
throws IOException
{
String json = YamlUtils.yamlToJson(yamlContent);
log.info("yamlToJson: {}", json);
}
}
application.yml
server:
port: 8082
servlet:
context-path: /
session:
timeout: 1800
spring:
datasource:
url: ${druid.url}
username: ${druid.username}
password: ${druid.password}
driverClassName: ${druid.driverClassName}
type: com.alibaba.druid.pool.DruidDataSource
sqlScriptEncoding: utf-8
initialization-mode: embedded
schema: classpath:schema.sql
profiles:
active:
- dev
servlet:
multipart:
max-file-size: 10MB
max-request-size: 100MB
knife4j:
enable: true
logging:
level:
root: info
org.springframework.web: info
04-27 10:12:38.918 [main] INFO com.fly.core.utils.YamlUtilsTest - yamlToMap: {server.port=8082, server.servlet.context-path=/, server.servlet.session.timeout=1800, spring.datasource.url=${druid.url}, spring.datasource.username=${druid.username}, spring.datasource.password=${druid.password}, spring.datasource.driverClassName=${druid.driverClassName}, spring.datasource.type=com.alibaba.druid.pool.DruidDataSource, spring.datasource.sqlScriptEncoding=utf-8, spring.datasource.initialization-mode=embedded, spring.datasource.schema=classpath:schema.sql, spring.profiles.active.1=dev, spring.servlet.multipart.max-file-size=10MB, spring.servlet.multipart.max-request-size=100MB, knife4j.enable=true, logging.level.root=info, logging.level.org.springframework.web=info}
04-27 10:12:38.932 [main] INFO com.fly.core.utils.YamlUtilsTest - yamlToJson: {
"server" : {
"port" : 8082,
"servlet" : {
"context-path" : "/",
"session" : {
"timeout" : 1800
}
}
},
"spring" : {
"datasource" : {
"url" : "${druid.url}",
"username" : "${druid.username}",
"password" : "${druid.password}",
"driverClassName" : "${druid.driverClassName}",
"type" : "com.alibaba.druid.pool.DruidDataSource",
"sqlScriptEncoding" : "utf-8",
"initialization-mode" : "embedded",
"schema" : "classpath:schema.sql"
},
"profiles" : {
"active" : [ "dev" ]
},
"servlet" : {
"multipart" : {
"max-file-size" : "10MB",
"max-request-size" : "100MB"
}
}
},
"knife4j" : {
"enable" : true
},
"logging" : {
"level" : {
"root" : "info",
"org.springframework.web" : "info"
}
}
}
04-27 10:12:38.937 [main] INFO com.fly.core.utils.YamlUtilsTest - yamlToProperties: {logging.level.org.springframework.web=info, spring.datasource.schema=classpath:schema.sql, spring.datasource.url=${druid.url}, server.servlet.session.timeout=1800, spring.datasource.username=${druid.username}, logging.level.root=info, spring.servlet.multipart.max-request-size=100MB, spring.datasource.initialization-mode=embedded, server.servlet.context-path=/, spring.datasource.driverClassName=${druid.driverClassName}, spring.datasource.sqlScriptEncoding=utf-8, server.port=8082, spring.datasource.password=${druid.password}, knife4j.enable=true, spring.profiles.active.1=dev, spring.servlet.multipart.max-file-size=10MB, spring.datasource.type=com.alibaba.druid.pool.DruidDataSource}
04-27 10:12:38.939 [main] INFO com.fly.core.utils.YamlUtilsTest - yamlToProperties: {logging.level.org.springframework.web=info, spring.datasource.schema=classpath:schema.sql, spring.datasource.url=${druid.url}, server.servlet.session.timeout=1800, spring.datasource.username=${druid.username}, logging.level.root=info, spring.servlet.multipart.max-request-size=100MB, spring.datasource.initialization-mode=embedded, server.servlet.context-path=/, spring.datasource.driverClassName=${druid.driverClassName}, spring.datasource.sqlScriptEncoding=utf-8, server.port=8082, spring.datasource.password=${druid.password}, knife4j.enable=true, spring.profiles.active.1=dev, spring.servlet.multipart.max-file-size=10MB, spring.datasource.type=com.alibaba.druid.pool.DruidDataSource}
04-27 10:12:38.943 [main] INFO com.fly.core.utils.YamlUtilsTest - yamlToPropText: server.port=8082
server.servlet.context-path=/
server.servlet.session.timeout=1800
spring.datasource.url=${druid.url}
spring.datasource.username=${druid.username}
spring.datasource.password=${druid.password}
spring.datasource.driverClassName=${druid.driverClassName}
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.sqlScriptEncoding=utf-8
spring.datasource.initialization-mode=embedded
spring.datasource.schema=classpath:schema.sql
spring.profiles.active.1=dev
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=100MB
knife4j.enable=true
logging.level.root=info
logging.level.org.springframework.web=info
/**
* Properties 转换工具
*
* @author 00fly
*
*/
public class PropertiesUtils
{
private static YAMLMapper yamlMapper = new YAMLMapper();
private static JavaPropsMapper javaPropsMapper = new JavaPropsMapper();
/**
* properties对象转Json字符串
*
* @param properties对象
* @return
* @throws IOException
*/
public static String propertiesToJson(Properties properties)
throws IOException
{
JsonNode jsonNode = javaPropsMapper.readPropertiesAs(properties, JsonNode.class);
return jsonNode.toPrettyString();
}
/**
* properties对象转yaml
*
* @param properties对象
* @return
* @throws IOException
*/
public static String propertiesToYaml(Properties properties)
throws IOException
{
JsonNode jsonNode = javaPropsMapper.readPropertiesAs(properties, JsonNode.class);
return yamlMapper.writeValueAsString(jsonNode);
}
/**
* properties字符串转Json字符串
*
* @param propText
* @return
* @throws IOException
*/
public static String propTextToJson(String propText)
throws IOException
{
JsonNode jsonNode = javaPropsMapper.readTree(propText);
return jsonNode.toPrettyString();
}
/**
* properties字符串转yaml
*
* @param propText
* @return
* @throws IOException
*/
public static String propTextToYaml(String propText)
throws IOException
{
JsonNode jsonNode = javaPropsMapper.readTree(propText);
return yamlMapper.writeValueAsString(jsonNode);
}
private PropertiesUtils()
{
super();
}
}
https://gitee.com/00fly/effict-side/tree/master/springboot-hello/src/main/java/com/fly/core/utils
– over –