springboot 使用官方工具类手动读取yml文件

该博客主要介绍了如何使用Java读取和解析YAML格式的配置文件,将内容转换为Map,并进行层次化的扁平化处理。代码示例展示了从`application-dev1.yml`加载数据并打印结果,输出为键值对形式。

代码: 

    //读取文件
	private Map<String, Object> getResource(String classPath) {
		ClassPathResource resource = new ClassPathResource(classPath);
		InputStream inputStream;
		Yaml yaml = new Yaml();
		Map<String, Object> res = new LinkedHashMap<>();
		try {
			inputStream = resource.getInputStream();
			BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
			Map<String, Object> map = yaml.load(reader);
			buildFlattenedMap(res, asMap(map), null);
		} catch (IOException e) {
			LOGGER.info("get input stream fail", e);
		}
		return res;
	}

    //转为map
	private Map<String, Object> asMap(Object object) {
		// YAML can have numbers as keys
		Map<String, Object> result = new LinkedHashMap<>();
		if (!(object instanceof Map)) {
			// A document can be a text literal
			result.put("document", object);
			return result;
		}

		Map<Object, Object> map = (Map<Object, Object>
### 如何用Java读取YML文件中的配置类属性 在 Java 中,可以通过多种方式读取 YML 文件中的配置类属性。通常会借助第三方库(如 SnakeYAML 或 Spring Boot 的 `@ConfigurationProperties` 注解)。以下是详细的实现方法以及注意事项。 #### 方法一:使用 SnakeYAML 库 SnakeYAML 是一个强大的工具,可以解析 YAML 数据并将其转换为 Map 或者自定义对象形式。下面是一个简单的例子: ```java import org.yaml.snakeyaml.Yaml; import java.io.InputStream; import java.util.Map; public class YamlReader { public static void main(String[] args) throws Exception { Yaml yaml = new Yaml(); InputStream inputStream = YamlReader.class.getClassLoader() .getResourceAsStream("application-test.yml"); Map<String, Object> data = yaml.load(inputStream); System.out.println(data.get("ws")); // 输出 ws 配置项的内容 } } ``` 上述代码通过加载名为 `application-test.yml` 的文件,并将其中的数据映射到 `Map<String, Object>` 对象中[^3]。此方法适用于简单场景下的键值对读取。 --- #### 方法二:Spring Boot 自动化绑定 如果项目基于 Spring Boot,则推荐使用其内置支持的功能来简化操作过程。具体来说,可以利用 `@ConfigurationProperties` 和 `@EnableConfigurationProperties` 来完成自动化的数据绑定。 ##### 步骤说明: 1. **创建对应的实体类** 定义一个 POJO 类用于表示 YML 文件中的结构。 ```java import org.springframework.boot.context.properties.ConfigurationProperties; import java.util.List; @ConfigurationProperties(prefix = "ws") // 前缀对应于 yml 文件中的顶级 key public class WsConfig { private List<WsItem> pubList; // 列表字段匹配多个子节点 public static class WsItem { private String puburl; private String pubclass; // Getter and Setter methods... public String getPuburl() { return puburl; } public void setPuburl(String puburl) { this.puburl = puburl; } public String getPubclass() { return pubclass; } public void setPubclass(String pubclass) { this.pubclass = pubclass; } } // Getter and Setter methods... public List<WsItem> getPubList() { return pubList; } public void setPubList(List<WsItem> pubList) { this.pubList = pubList; } } ``` 2. **启用 Configuration Properties 支持** 在主应用程序启动类上添加注解以激活功能。 ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.properties.EnableConfigurationProperties; @SpringBootApplication @EnableConfigurationProperties(WsConfig.class) public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 3. **注入并访问配置** 将该 Bean 注入到其他组件中即可轻松获取所需参数。 ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class ConfigService { @Autowired private WsConfig wsConfig; public void displayConfigs() { wsConfig.getPubList().forEach(item -> { System.out.println("URL: " + item.getPuburl()); System.out.println("Class: " + item.getPubclass()); }); } } ``` 这种方法不仅提高了可维护性和扩展性,还减少了手动处理复杂嵌套逻辑的工作量[^4]。 --- #### 注意事项 - 确保引入必要的依赖项。对于 SnakeYAML,请加入 Maven 仓库声明如下所示: ```xml <dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> <version>1.30</version> </dependency> ``` - 如果采用 Spring Boot 方案,则无需额外安装插件;只需确认版本兼容即可。 - 考虑跨平台运行时可能存在的路径差异问题,统一管理资源定位字符串[^1]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七号公园的忧伤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值