SpringBoot解析指定Yaml配置文件的实现过程
作者:叫我二蛋 发布时间:2023-05-22 19:09:23
下面还有投票,帮忙投个票👍
前言
最近在看某个开源项目代码并准备参与其中,代码过了一遍后发现多个自定义的配置文件用来装载业务配置代替数据库查询,直接响应给前端,这里简单记录一下实现过程。
我们通常在SpringBoot项目中用配置文件属性时使用@ConfigurationProperties或@Value默认配置文件的属性值,也就是application.yml或者application.properties文件中的属性值。
但是不能全都往默认配置文件里堆的,本文利用@PropertySource和@ConfigurationProperties注解引用其它配置文件的属性值。
1、自定义配置文件
在resources下创建my.yaml文件,“-”用来表示数组类型,一定要注意空格。
my:
contents:
- id: 12121
name: nadasd
- id: 3333
name: vfffff
2、配置对象类
创建配置类对象,在类上添加@Component、@PropertySource、@ConfigurationProperties注解。
@Component是将该类交由spring管理,@PropertySource用来指定配置文件及解析Yaml格式,@ConfigurationProperties是将解析后的配置文件属性自动注入该类的属性。
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Component
@PropertySource(value = "classpath:my.yaml", factory = YamlPropertiesSourceFactory.class)
@ConfigurationProperties(prefix = "my")
public class MyProperties {
private List<content> contents = new ArrayList<>();
public List<content> getContents() {
return contents;
}
public void setContents(List<content> contents) {
this.contents = contents;
}
}
class content {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@PropertySource注解是Spring用于加载配置文件,@PropertySource属性如下:
name:默认为空,不指定Spring自动生成
value:配置文件
ignoreResourceNotFound:没有找到配置文件是否忽略,默认false,4.0版本加入
encoding:配置文件编码格式,默认UTF-8 4.3版本才加入
factory:配置文件解析工厂,默认:PropertySourceFactory.class 4.3版本才加入,如果是之前的版本就需要手动注入配置文件解析Bean
Spring Boot 默认不支持@PropertySource读取yaml 文件,需要自定义PropertySourceFactory进行解析。
3、YamlPropertiesSourceFactory
创建YamlPropertiesSourceFactory类用来解析Yaml格式的文件。
import org.springframework.boot.env.YamlPropertySourceLoader;
import org.springframework.core.env.PropertySource;
import org.springframework.core.io.support.EncodedResource;
import org.springframework.core.io.support.PropertySourceFactory;
import java.io.IOException;
import java.util.List;
import java.util.Optional;
public class YamlPropertiesSourceFactory implements PropertySourceFactory {
@Override
public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {
String resourceName = Optional.ofNullable(name).orElse(resource.getResource().getFilename());
List<PropertySource<?>> yamlSources = new YamlPropertySourceLoader().load(resourceName, resource.getResource());
return yamlSources.get(0);
}
}
来源:https://blog.csdn.net/qq_28314431/article/details/129689284
猜你喜欢
- 使用maven引入jar<dependency> <groupId>com.itextpdf</g
- 在做在线编程题目的时候,需要了解一下数据的输入格式。这样可以对数据处理有比较好的把握,不需要把太多的时间放在这个上面,注重主要的算法逻辑即可
- Web Fragment 是什么 - 它是在 servlet 3.0开始支持的,可以把一个dy web项目拆分为多个项目,解耦合,使其在项目
- 本文实例为大家分享了C#生成Word文件的具体代码,供大家参考,具体内容如下通过Microsoft.Office.Interop.Word生
- 本文实例讲述了c#窗体传值用法。分享给大家供大家参考。具体分析如下:对于窗体间的数据传递,是刚开始从事.Net窗体应用程序开发人员碰到的一个
- 实例引入在家庭影院中,有灯光,屏幕,投影机,功放机,DVD 播放器这几个基本的工具:灯光,可以关闭灯光和打开灯光。投影机,可以打开和关闭投影
- 1 pom.xml文件注:热部署功能spring-boot-1.3开始有的<!--添加依赖--><dependency&g
- LeetCode -- Path Sum III分析及实现方法题目描述:You are given a binary tree in whi
- 这篇文章主要介绍了Java如何实现自定义异常类,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参
- 工作闲暇之余去逛了逛CodeProject,刚好现有项目主要用到就是winform,浏览了下照片,找到上周带着蛋挞打疫苗回家的照片,于是新生
- 一、简介二、代码/activityLifeCycle_3Screen/AndroidManifest.xml<manifest xml
- 今天就来拿贪吃蛇小游戏来练练手吧!贪吃蛇游戏规则: 1.按下空格键(游戏未结束)则游戏
- 前言Java8 由Oracle在2014年发布,是继Java5之后最具革命性的版本。Java8吸收其他语言的精髓带来了函数式编程,lambd
- 在Java的线程执行中,不管是直接继承Thread的方式,还是实现Runnable接口的方式,都不会获取到线程执行的返回结果。这样如果线程在
- 【1】阻塞队列一、什么是阻塞队列?① 支持阻塞的插入方法:意思是当队列满时,队列会阻塞插入元素的线程,直到队列不满。② 支持阻塞的移除方法:
- 提示:建议一定要看后面的@RequestBody的核心逻辑源码以及六个重要结论!本文前半部分的内容都是一些基本知识常识,可选择性跳过。声明:
- 本文实例讲述了C#实现基于Base64的加密解密类。分享给大家供大家参考。具体如下:这个C#类是一个基于Base64的加密和解密类,用户可以
- 所谓回调,就是客户程序C调用服务程序S中的某个方法A,然后S又在某个时候反过来调用C中的某个方法B,对于C来说,这个B便叫做回调方法。下面看
- 一、身份证结构和形式在通用的身份证号码有15位的和18位的;15位身份证号码各位的含义:1、1-2位省、自治区、直辖市代码;2、3-4位地级
- 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督。本文从最简单的一个排序算法——桶排序开始,分析桶排序的实现思路,代码实现,性