这里写目录标题
- 1、基本语法
- 2、给java bean注入值
- 3、测试
1、基本语法
# yaml 配置文件写法,代替properties写法
# 严格区分空格# 内注入到配置类中
server:port: 8081# 对象
student:name: jackage: 3# 行内写法 map
student1: {name: jack, age: 3}# array or collections
pets:- dog- cat- turtlepets1: [dog, cat, turtle]# 还可以写随机数 或者 uuid
uuid: ${random.uuid}
random: ${random.int}
2、给java bean注入值
- 核心
@ConfigurationProperties(prefix = "person")
// yaml 里面写person的属性
// 应用:数据源配置..
- application.yaml
# yaml 对象注入
dog:name: 八公age: 6person:person-name: abc@163.com # bitqian_${random.uuid}happy: falsemaps: {k1: v1, k2: v2}age: ${random.int}hobbyList:- girl- code- bookdog:name: 拉布拉多age: 3server:port:8081# https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config
- 这里以dog,和person实体类对各种数据类型说明
- dog 这里用了properties加载配置,官方推荐ymal
package cn.bitqian.entity;import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;/*** @author echo lovely* @date 2020/9/26 21:45*/
@Component
// @ConfigurationProperties(prefix = "dog")
@PropertySource(value = "classpath:application.properties")
public class Dog {// value & SPEL @Value("${server.port}")private String name;private Integer age;public Dog() {}public Dog(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;}@Overridepublic String toString() {return "Dog{" +"name='" + name + '\'' +", age=" + age +'}';}
}
- person类
package cn.bitqian.entity;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;import javax.validation.constraints.Email;import java.util.List;
import java.util.Map;/*** @author echo lovely* @date 2020/9/26 21:46*/
@Component
// 对应前缀
@ConfigurationProperties(prefix = "person") // setter/getter 与yaml对应
@Validated // 数据校验
public class Person {@Email(message = "必须是邮箱格式")private String personName;private Boolean happy;private Integer age;private Map<String, Object> maps;private List<Object> hobbyList;private Dog dog;public Person() {}public Person(String name, Boolean happy, Integer age,Map<String, Object> maps, List<Object> hobbyList, Dog dog) {this.personName = name;this.happy = happy;this.age = age;this.maps = maps;this.hobbyList = hobbyList;this.dog = dog;}public String getPersonName() {return personName;}public void setPersonName(String personName) {this.personName = personName;}public Boolean getHappy() {return happy;}public void setHappy(Boolean happy) {this.happy = happy;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Map<String, Object> getMaps() {return maps;}public void setMaps(Map<String, Object> maps) {this.maps = maps;}public List<Object> getHobbyList() {return hobbyList;}public void setHobbyList(List<Object> hobbyList) {this.hobbyList = hobbyList;}public Dog getDog() {return dog;}public void setDog(Dog dog) {this.dog = dog;}@Overridepublic String toString() {return "Person{" +"personName='" + personName + '\'' +", happy=" + happy +", age=" + age +", maps=" + maps +", hobbyList=" + hobbyList +", dog=" + dog +'}';}
}
3、测试
package cn.bitqian;import cn.bitqian.entity.Dog;
import cn.bitqian.entity.Person;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.context.SpringBootTest;import javax.annotation.Resource;@SpringBootTest
class Springboot02ApplicationTests {@Resourceprivate Dog dog;@Autowired@Qualifier(value = "person")private Person person;@Testvoid contextLoads() {System.out.println(dog);System.out.println(person);}}
age是随机的int,personName 做了邮箱验证