5. SpringBoot 配置
**spring boot配置 **
- spring boot 的配置有非常多,全文背诵就不太现实。
properties文件中可以修改配置,但官方推荐使用yaml文件
application.properties:
server.port=8081
server.address=1.1.1.1
application.yaml:
server:
port: 8081
address: 1.1.1.1
注意: 在冒号之后,属性值之前,有一个空格,是不可缺少的 !
yaml 的文件扩展名可以是.yaml
或 .yml
YAML
YAML是"YAML Ain’t a Markup Language"(YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言),但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名。
yaml基本语法规则:
server:
port: 8081
address: 1.1.1.1
#对象
user:
id: 1001
name: 李四
age: 20
#行内写法
student: {name: 张三,age: 19}
# 数组
pets: [dog, cat]
pets2:
- dog
- cat
- pig
- bird
yaml 给实体类赋值
实体类:
-
dog 类
@Component public class Dog { // @Value 可以给属性赋值 @Value("旺财") private String name; @Value("公") private String sex; @Value("3") private Integer age; //geter and setter toString... 省略 }
-
Person类
- 使用 @ConfigurationProperties(prefix = “person”) 可以将yaml配置中的属性值赋给实体类
@Component @ConfigurationProperties(prefix = "person") public class Person { private String name; private Integer age; private Date birth; private Boolean sex; private Map<String,Object> map; private List<Object> hobbies; private Dog dog; }
-
如果出现爆红提示↓↓↓,点击Open Documentation 进入官网,将官网中给出的依赖添加到pom.xml中
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ha4XV1bQ-1634138006549)(SpringBoot.assets/image-20210828195702297.png)]
依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
-
application.yaml
person: name: 张三 age: 19 birth: 2000/11/21 sex: true map: {k1: v1, k2: v2} hobbies: - code - music - sport dog: name: 旺财 sex: 公 age: 3
-
测试类中进行测试
@SpringBootTest class Spring03ConfigApplicationTests { @Autowired private Person person; @Test void contextLoads() { System.out.println("person = " + person); } }
-
测试结果
person = Person{name='张三', age=19, birth=Tue Nov 21 00:00:00 CST 2000, sex=true, map={k1=v1, k2=v2}, hobbies=[code, music, sport], dog=Dog{name='旺财', sex='公', age=3}}
-
yaml特殊语法
person:
id: ${random.uuid} #生成一串id字符串
name: ${person.default:张三} #表示如果person有default值就使用default的值,没有就使用张三
age: ${random.int(1,100)} #随机1到100的整数
birth: 2000/11/21
等等…
properties也可以做到,但比较麻烦:
a.properties:
name=张三
在实体类中使用@PropertySource(value=“classpath:a.properties”) 可以指定properties做为配置文件,
使用@Value("${name}")可以取出properties中的数据,并赋值给对应属性;