您的位置:首页 > 教程 > JAVA/JAVA编程 > SpringBoot读写操作yml配置文件方法

SpringBoot读写操作yml配置文件方法

2023-01-19 09:07:54 来源:易采站长站 作者:

目录yml配置规则普通的kv读取读取到集合和数组读取为对象和Mapyml配置规则属性跟属性值之间使用:和一个空格隔开,层级结构通过缩进对齐,缩进只能使用空格,不能用tab,并且大小写敏感,使用#注释文...

目录
yml配置规则
普通的kv读取
读取到集合和数组
读取为对象和Map

yml配置规则

属性跟属性值之间使用“:”和一个“空格”隔开,层级结构通过缩进对齐,缩进只能使用空格,不能用tab,并且大小写敏感,使用#注释文档;

yml配置除了能像properties读取为kv结构,还能方便的读取成集合(List、Set等)、数组、对象、Mawww.cppcns.comp,还能进行嵌套结构读取;

普通的kv读取

[email protected],@Value除了可以读取普通kv,也能读取List或Map结构里的某一项;另外使用Environment.getProperty()方法也能像properties那样读取kv结构,但也只能以kv结构读取;

yml格式:

xxx: xxxx
xxx:
 xxx: xxxx
 xxx:
  xxx: xxxx
  xxx: xxxx
 xxx: xxxx

[email protected]("${xxx}")[email protected]("${xxx.xxx.xxx}")读取;

读取到集合和数组

[email protected]: xxxx,xxxx,xxxx逗号隔开的格式,可以读取成List、Set或者数组,其他格式可以放到Bean里当作类的属性读取;

yml格式:

xxx:
 - xxxx
 - xxxx
 - xxxx
xxx: [xxxx,xxxx,xxxx]
xxx: xxxx,xxxx,xxxx

读取为对象和Map

对象和Map的格式是一样的,只是读取的目标不同;读取为对象时需要提供setXXX方法,并且XXX要跟配置文件里命名一致;(另外测试时发现自动生成的set方法,对驼峰结构修改大小写会造成无法识别到配置)

yml格式:

xxx:
 x: xxxx
 x: xxxx
 x: xxxx
xxx: {x: xxxx, x: xxxx, x: xxxx}

另外各种格式可以组合嵌套使用,例如list里使用map或者map里包含list;

Demo:

yml配置文件application.yml:

#yml文件
 
a: hello
val:
 b: 123
 c: false
 d: ENV
 
mybeantest:
 name: Tom
 age: 14
 addr: 北京
 bestfriend: ${myArrayA[3]}
mybeantest2: {name: Jerry, age: 13, id: 1001}
 
myArrayA:
 - tom
 - jerry
 - jack
 - alice
myArrayB: [a,b,c]
myListC: 3,4,5,6
myListD: [{name: Jerry, age: 11, addr: 上海},{name: Jack, age: 12, addr: 北京}]
myListE:
 - {name: Bob, age: 22}
 - {name: Lily, age: 21}
myListF:
 - name: AAA
   age: 11
 - name: BBB
   age: 22
myListG:
 - - aaa
   - bbb
   - ccc
 - - dd
   - ee
   - ff
 
maps:
 mapA:
  A: 1
  B: 2
  C: 3
  D: 4
 mapB:
  a: AA
  b: BB
  c: CC
 mapC: {X: x, Y: y, Z: z}
 mapD:
  L1:
   - x
   - y
   - z
  L2:
   - X
   - Y
   - Z
 mapE:
  M1:
   a: A
   b: B
  M2:
   C: c
   D: d
 mapF:
  m1: {name: TOM, age: 33}
  m2: {name: JERRY, age: 44}

读取为bean的类MyBean.Java和MyBean2.java:

package testspringboot.test3;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "mybeantest")
public class MyBean {
public String name;
public int age;
public String address;
public String bestFriend;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddr(String address) {//setXXX方法,只需XXX跟配置文件里的名称对应即可(自动生成的set方法驼峰结构修改大小写会造成干扰)
this.address = address;
}
public String getBestFriend() {
return bestFriend;
}
public void setBestFriend(String bestFriend) {
this.bestFriend = bestFriend;
}
@Override
public String toString() {
return "MyBean [name=" + name + ", age=" + age + ", address=" + address + ", bestFriend=" + bestFriend + "]";
}
}
package testspringboot.test3;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "mybeantest2")
public class MyBean2 {
public String name;
public int age;
public int id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public String toString() {
return "MyBean2 [name=" + name + ", age=" + age + ", id=" + id + "]";
}
}

读取为集合的类MyList.java:

package testspringboot.test3;
import java.util.List;
import java.util.Set;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "")
public class MyList {
public List<String> myArrayA;
public Set<String> myArrayB;
public Integer[] myListC;
public List<MyBean> myListD;
public List<MyBean> myListE;
public List<MyBean> myListF;
public List<List<String>> myListG;
public List<String> getMyArrayA() {
return myArrayA;
}
public void setMyArrayA(List<String> myArrayA) {
this.myArrayA = myArrayA;
}
public Set<String> getMyArrayB() {
return myArrayB;
}
public void setMyArrayB(Set<String> myArrayB) {
this.myArrayB = myArrayB;
}
public Integer[] getMyListC() {
return myListC;
}
public void setMyListC(Integer[] myListC) {
this.myListC = myListC;
}
public List<MyBean> getMyListD() {
return myListD;
}
public void setMyListD(List<MyBean> myListD) {
this.myListD = myListD;
}
public List<MyBean> getMyListE() {
return myListE;
}
public void setMyListE(List<MyBean> myListE) {
this.myListE = myListE;
}
public List<MyBean> getMyListF() {
return myListF;
}
public void setMyListF(List<MyBean> myListF) {
this.myListF = myListF;
}
public List<List<String>> getMyListG() {
return myListG;
}
public void setMyListG(List<List<String>> myListG) {
this.myListG = myListG;
}
@Override
public String toString() {
return "MyList [myArrayA=" + myArrayA + ",\n myArrayB=" + myArrayB + ",\n myListC=" + myListC + ",\n myListD="
+ myListD + ",\n myListE=" + myListE + ",\n myListF=" + myListF + ",\n myListG=" + myListG + "]";
}
}

读取为Map的类MyMap.java:

package testspringboot.test3;
import java.util.List;
import java.util.Map;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "maps")
public class MyMap {
public Map<String, Integer> mapA;
public Map<String, String> mapB;
public Map<String, String> mapC;
public Map<String, List<String>> mapD;
public Map<String, Map<String, String>> mapE;
public Map<String, MyBean2> mapF;
public Map<String, Integer> getMapA() {
return mapA;
}
public void setMapA(Map<String, Integer> mapA) {
this.mapA = mapA;
}
public Map<String, String> getMapB() {
return mapB;
}
public void setMapB(Map<String, String> mapB) {
this.mapB = mapB;
}
public Map<String, String> getMapC() {
return mapC;
}
public void setMapC(Map<String, String> mapC) {
this.mapC = mapC;
}
public Map<String, List<String>> getMapD() {
return mapD;
}
public void setMapD(Map<String, List<String>> mapD) {
this.mapD = mapD;
}
public Map<String, Map<String, String>> getMapE() {
return mapE;
}
public void setMapE(Map<String, Map<String, String>> mapE) {
this.mapE = mapE;
}
public Map<String, MyBean2> getMapF() {
return mapF;
}
public void setMapF(Map<String, MyBean2> mapF) {
this.mapF = mapF;
}
@Override
public String toString() {
return String.format("MyMap [mapA=%s,\n mapB=%s,\n mapC=%s,\n mapD=%s,\n mapE=%s,\n mapF=%s]", mapA, mapB, mapC, mapD,
mapE, mapF);
}
}

进行测试用的类Test3Class.java:

package testspringboot.test3;
import java.util.List;
import java.util.Set;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
@Component
public class Test3Class {
@Value("${a}")
public String a;
@Value("${val.b}")
public int b;
@Value("${val.c}")
public boolean c;
@Autowired
public Environment env;
@Resource
public MyBean bean;
@Resource
public MyBean2 bean2;
@Value("${myArrayA[3]}")
public String arrayA_3; 
@Value("${myArrayB[1]}")
public String arrayB_1;
@Value("${myListC}")
public List<Integer> list;
@Value("${myListC}")
public Set<String> set;
@Value("${myListC}")
public String[] array; 
@Resource
public MyList mylist;
@Resource
public MyMap mymap;
@PostConstruct
public void fun() {
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(env.getProperty("val.d"));
System.out.println(bean);
System.out.println(bean2);
System.out.println(arrayA_3);
System.out.println(arrayB_1);
System.out.println(list);
System.out.println(set);
System.out.println(array);
System.out.println(mylist);
System.out.println(mymap);
}
}

启动类(只测配置文件,所以设置WebApplicationType.NONE关闭web服务):

package testspringboot.test3;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Test3Main {
/**
 * @param args
 */
public static void main(String[] args) {
SpringApplication sapp = new SpringApplication(Test3Main.class);
sapp.setWebApplicationType(WebApplicationType.NONE);
sapp.run(args);
}
}

执行结果:

SpringBoot读写操作yml配置文件方法

到此这篇关于SpringBoot读写操作yml配置文件方法的文章就介绍到这了,更多相关SpringBoot读写操作yml 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

如有侵权,请发邮件到 [email protected]

相关文章

  • Spring Cloud 整合Apache-SkyWalking实现链路跟踪的方法

    Spring Cloud 整合Apache-SkyWalking实现链路跟踪的方法

    什么是SkyWalking 查看官网https://skywalking.apache.org/ 分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。 安装 进入下载页面https://
    2020-06-18
  • 成功解决IDEA2020 Plugins 连不上、打不开的方法

    成功解决IDEA2020 Plugins 连不上、打不开的方法

    IntelliJ IDEA 2020.1 插件中心一直打不开,鉴于有部分同学反馈设置http proxy不能解决,所以可按以下顺序检查 一、设置 http proxy—勾上Auto-detect proxy setting,参照下图,加上地址 http://127.0.0
    2020-06-25
  • Java后台实现微信支付和微信退款

    Java后台实现微信支付和微信退款

    微信支付流程 都是我自己工作中开发的,亲测可用,不喜勿喷。 controller中我是这么写的,你们需要根据自己的业务需求改动。ResponseBean是我自己封装的,你们可以改成你们想要的形式
    2020-03-27
  • IDEA2020 1.1中Plugins加载不出来的问题及解决方法

    IDEA2020 1.1中Plugins加载不出来的问题及解决方法

    进入File-Setting 如图,取消勾选,点击确认后重启,点击了以后等一会就可以正常显示 ps:下面看下解决IDEA 2020.1.1 找不到程序包和符号 问题描述 IDEA 2020.1.1 maven项目build的时候报错,找
    2020-06-28
  • Intellij idea热部署插件JRebel的使用

    Intellij idea热部署插件JRebel的使用

    项目需求,一直用eclipse的我,也要改用IDEA了,一开始,很不习惯。经过几天的慢慢摸索和习惯之后,发现IDEA确实很好用。dark的界面是我喜欢的,智能的提示也让写代码不再枯燥。 遗
    2020-06-25
  • 详解基于IDEA2020.1的JAVA代码提示插件开发例子

    详解基于IDEA2020.1的JAVA代码提示插件开发例子

    之前因为项目组有自己的代码规范,为了约束平时的开发规范,于是基于2019.1.3版本开发了一个代码提示的插件。但是在把IDEA切换到2020.1版本的时候,却发现疯狂报错,但是网上关于
    2020-06-25
  • springboot + rabbitmq 如何实现消息确认机制(踩坑经验)

    springboot + rabbitmq 如何实现消息确认机制(踩坑经验)

    本文收录在个人博客:www.chengxy-nds.top,技术资源共享,一起进步 最近部门号召大伙多组织一些技术分享会,说是要活跃公司的技术氛围,但早就看穿一切的我知道,这 T M 就是为了刷
    2020-07-01
  • JetBrains IntelliJ IDEA 2020安装与使用教程详解

    JetBrains IntelliJ IDEA 2020安装与使用教程详解

    对于JetBrains IntelliJ IDEA 2020的认识 IntelliJ IDEA 2020是一款JAVA编程软件,捷克IntelliJ公司研发推出。该软件提供了一个非常强大的JAVA集成开发环境,不仅添加了对Records的完整代码洞察支持,
    2020-06-28