yml语法
引号的区别
双引号
不会转义字符串里面的特殊字符,特殊字符会作为本身想表达的意思
name: name: "zhangsan \n lisi"
输出:zhangsan 换行 lisi
单引号
会转义字符,特殊字符最终会以普通字符输出
name: 'zhangsan \n lisi'
输出:zhangsan \n lisi
对象和Map
friends:
name: zhangsan
age: 20
或者:
friends: {name: zhangsan,age: 20}
数组(List、Set)
用- 来表示每一个元素
pets:
- cat
- dog
- pig
或者:
pets: [cat,dog,pig]
搭配使用的注解
- (写在类上)@ConfigurationProperties(profix: “person”)
告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
profix: “person”
指定前缀(配置文件中的哪个属性下面的所有属性进行一一映射)
-
(写在属性上)@Value("${person.name}")
${}从字面量、配置文件中获取值
#{}SpringEL(表达式)
-
@ConfigurationProperties 和 @Value获取值的比较
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入配置文件中的值 | 只能一个个注入 |
松散绑定(松散语法) | 支出 | 不支持 |
SpEL(Spring表达式) | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
两个注解都能获取到配置文件中的值;
如果说只是在某个业务中需要获取一下配置文件中的某项值,就用@Value
如果编写了一个JavaBean来和配置文件进行映射,就用@ConfigurationProperties
添加依赖
<!--导入配置文件处理器,导入此依赖后在配置文件中给属性绑定值时会有提示-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
加载指定的配置文件
把配置文件拆分成多个,花括号中的值可以有多个
@PropertySource(value = {“classpath:person.properties”})
给容器中添加组件
@Configuration//指明当前类是一个配置类
public class MyAppConfig {
@Bean//
public HelloController helloSerbice(){
return new HelloController();
}
}
文档块
文档块相当于多个文件
spring
profiles
active: dev
server
port: 8080
---
spring
profiles: dev
server
port: 8081
---
spring
profiles: test
server
port: 8082
激活配置文件
- 在配置文件中指定
spring.profiles.active=dev
- 命令行参数
Java -jar 包名 --spring.profiles.active=dev
- 虚拟机参数
-Dspring.profiles.active=dev