yaml文件语法:
----------------------------实际操作---------------------------------
文件目录:
创建Cat类:
package com.springbootpractise.pojo;public classCat {privateString name;privateInteger age;publicCat() {
}publicCat(String name, Integer age) {this.name =name;this.age =age;
}publicString getName() {returnname;
}public voidsetName(String name) {this.name =name;
}publicInteger getAge() {returnage;
}public voidsetAge(Integer age) {this.age =age;
}
@OverridepublicString 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 classPerson {//SPEL表达式取出配置文件的值//@Value("${name}")
privateString name;privateInteger age;privateBoolean happy;privateDate birth;private Mapmaps;private Listlists;privateCat cat;publicPerson() {
}public Person(String name, Integer age, Boolean happy, Date birth, Map maps, Listlists, Cat cat) {this.name =name;this.age =age;this.happy =happy;this.birth =birth;this.maps =maps;this.lists =lists;this.cat =cat;
}publicString getName() {returnname;
}public voidsetName(String name) {this.name =name;
}publicInteger getAge() {returnage;
}public voidsetAge(Integer age) {this.age =age;
}publicBoolean getHappy() {returnhappy;
}public voidsetHappy(Boolean happy) {this.happy =happy;
}publicDate getBirth() {returnbirth;
}public voidsetBirth(Date birth) {this.birth =birth;
}public MapgetMaps() {returnmaps;
}public void setMaps(Mapmaps) {this.maps =maps;
}public ListgetLists() {returnlists;
}public void setLists(Listlists) {this.lists =lists;
}publicCat getCat() {returncat;
}public voidsetCat(Cat cat) {this.cat =cat;
}
@OverridepublicString toString() {return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", happy=" + happy +
", birth=" + birth +
", maps=" + maps +
", lists=" + lists +
", cat=" + cat +
'}';
}
}
yaml文件配置内容:
person:
name: sunice
age:3happy:falsebirth:2021/02/16maps: {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;
@SpringBootTestclassSpringboot02ConfigApplicationTests {
@AutowiredprivatePerson person; //配置Person类
@TestvoidcontextLoads() {
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中添加依赖项即可解决问题
org.springframework.boot
spring-boot-configuration-processor
true
----------------- yaml文件占位符----------------------------------------
yaml文件中,也可以使用表达式进行赋值。${XXX} 是yaml文件中的占位符。XXX可以填写表达式。
person:
name: sunice${random.uuid}
age:3happy:falsebirth:2021/02/16maps: {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文件松散绑定----------中划线和驼峰命名可以互相映射---------
运行结果:
参考资料: