Java学习笔记 -- yaml文件配置
2021-02-16 13:49 sunice 阅读(1062) 评论(0) 编辑 收藏 举报yaml文件语法:
----------------------------实际操作---------------------------------
文件目录:
创建Cat类:
package com.springbootpractise.pojo; public class Cat { private String name; private Integer age; public Cat() { } public Cat(String name, Integer age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Cat{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
创建Person类:
package com.springbootpractise.pojo; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.PropertySource; import org.springframework.stereotype.Component; import java.util.Date; import java.util.List; import java.util.Map; @Component @ConfigurationProperties(prefix="person") //加载指定配置文件 //@PropertySource(value="classpath:qinjiang.properties") public class Person { //SPEL表达式取出配置文件的值 // @Value("${name}") private String name; private Integer age; private Boolean happy; private Date birth; private Map<String,Object> maps; private List<Object> lists; private Cat cat; public Person() { } public Person(String name, Integer age, Boolean happy, Date birth, Map<String, Object> maps, List<Object> lists, Cat cat) { this.name = name; this.age = age; this.happy = happy; this.birth = birth; this.maps = maps; this.lists = lists; this.cat = cat; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Boolean getHappy() { return happy; } public void setHappy(Boolean happy) { this.happy = happy; } public Date getBirth() { return birth; } public void setBirth(Date birth) { this.birth = birth; } public Map<String, Object> getMaps() { return maps; } public void setMaps(Map<String, Object> maps) { this.maps = maps; } public List<Object> getLists() { return lists; } public void setLists(List<Object> lists) { this.lists = lists; } public Cat getCat() { return cat; } public void setCat(Cat cat) { this.cat = cat; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + ", happy=" + happy + ", birth=" + birth + ", maps=" + maps + ", lists=" + lists + ", cat=" + cat + '}'; } }
yaml文件配置内容:
person: name: sunice age: 3 happy: false birth: 2021/02/16 maps: {k1: v1,k2: v2} lists: [1,2,3,4,5,cat] cat: {name: "猫",age: 3}
Test文件:
package com.springbootpractise; import com.springbootpractise.pojo.Person; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class Springboot02ConfigApplicationTests { @Autowired private Person person; //配置Person类 @Test void contextLoads() { System.out.println(person); //打印Person类
} }
运行结果:
Person{name='sunice', age=3, happy=false, birth=Tue Feb 16 00:00:00 CST 2021, maps={k1=v1, k2=v2}, lists=[1, 2, 3, 4, 5, cat], cat=Cat{name='猫', age=3}}
备注:
使用 @ConfigurationProperties(prefix="person") 后,IDEA会变红,在pom.xml中添加依赖项即可解决问题
<!--解决 @ConfigurationProperties(prefix="person") 会变红的问题--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <!--解决 @ConfigurationProperties(prefix="person") 会变红的问题-->
----------------- yaml文件占位符----------------------------------------
yaml文件中,也可以使用表达式进行赋值。${XXX} 是yaml文件中的占位符。XXX可以填写表达式。
person: name: sunice${random.uuid} age: 3 happy: false birth: 2021/02/16 maps: {k1: v1,k2: v2} lists: [1,2,3,4,5,cat] hello: world cat: name: ${person.hello:hello}_猫
运行结果:
Person{name='sunice115c27cd-44e9-406c-87b3-ca98a4860974', age=3, happy=false, birth=Tue Feb 16 00:00:00 CST 2021, maps={k1=v1, k2=v2}, lists=[1, 2, 3, 4, 5, cat], cat=Cat{name='world_猫', age=null}}
---------------yaml文件松散绑定----------中划线和驼峰命名可以互相映射---------
运行结果:
参考资料:
https://www.bilibili.com/video/BV1PE411i7CV?t=146&p=9
https://www.bilibili.com/video/BV1PE411i7CV?p=10&spm_id_from=pageDriver