一、配置文件
SpringBoot使用一个全局的配置文件,配置文件名是固定的;
- application.properties
- application.yml
作用:修改SpringBoot自动配置的默认值。
二、YMAL语法
.yml是YAML语言的文件,以数据为中心,比json、xml等更适合做配置文件
(1)基本语法
k: v:表示一对键值对(空格必须有);
以空格的缩进来控制层级关系;
只要是左对齐的一列数据,都是同一个层级的
server:
port: 8081
servlet:
context-path: /hello
(2)值的写法
- 字面量:普通的值(数字,字符串,布尔)
备注:字符串默认不用加上单引号或者双引号;加上单引号效果和默认相同,加上双引号,特殊字符会发生效果
person:
name: 张 \n 三
name2: "李 \n 四"
name3: '王 \n 五'
控制台打印输出
张 \n 三
李
四
王 \n 五
- 对象、Map(属性和值)(键值对):
k: v:在下一行来写对象的属性和值的关系;注意缩进
friends:
name: lisa
age: 28
friends: {name: lisa, age: 28} //行内写法
- 数组(List、Set):
animals:
- pig
- cat
- dog
animals: [pig, cat, dog] //行内写法
(三)值注入
如何获取配置文件里面的数据,有两种方法
person:
age: 28
boss: false
birth: 2018/10/10
maps: {k1: v1, k2: v2}
animals:
- pig
- dog
last-name: allen
(1) @Value
@Value("${person.last-name}")
private String lastName;
(2)javaBean
<!‐‐导入配置文件处理器,配置文件进行绑定就会有提示‐‐>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
(3)javaBean注入值数据校验
@Validated //校验注解
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
@Email //验证是否是邮箱格式
private String lastName;
private Integer age;
@NotNull //验证不空
private Boolean boss;
private Date birth;
private Map<String, Object> maps;
private List<Object> animals;
注: 验证邮箱的时候需要导入
<!-- 导入字段校验:hiberrate validator -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.4.Final</version>
</dependency>
(4)@PropertySource&@ImportResource
1、@PropertySource:加载指定的配置文件;
@ConfigurationProperties(prefix = “person”)默认从全局配置文件(application.yml)中获取值;如果想要获取指定配置文件,需要使用@PropertySource标签。@PropertySource(value = {“classpath:person.properties”})
2、@ImportResource:导入Spring的配置文件,让配置文件里面的内容生效;
@ImportResource(locations={"classpath:beans.xml"})
(5)@Value与@ConfigurationProperties区别
//松散绑定,@value的配置必须与配置文件里的一致
@Value("${person.last-name}")
private String lastName;
@Value("#{11*2}") //SPEL
private Integer age;
@Value("true")
private Boolean boss;
(四)配置文件占位符
1、随机数
${random.value}、${random.int}、${random.long}、${random.uuid}
${random.int(10)}、${random.int[1024,65536]}
2、占位符获取之前配置的值,如果没有也可以使用:指定默认值(冒号后没有空格)
person:
last-name: allen
dog:
name: ${person.last-name:hello}_dog
age: ${person.age:18}
(五)Profile
1、yml支持多文档块方式
server:
port: 8081
spring: // 启动哪个profile
profiles:
active: prod
--- // 用 --- 进行分割
server:
port: 8082
spring:
profiles: prod
---
server:
port: 8083
spring:
profiles: dev
2、多Profile文件
文件名可以是 application-{profile}.properties/yml
当application.yml文件中,没有spring.profiles.active时,启用application.yml文件中的配置;配置哪个用哪个文件。
注意:当代码已经打成jar包,但是如果想用另一个配置文件可以命令行:java -jar spring-boot-SNAPSHOT.jar --spring.profiles.active=dev;
(六)配置文件加载位置
1、springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文
件
–file:./config/
–file:./
–classpath:/config/
–classpath:/
优先级由高到底,高优先级的配置会覆盖低优先级的配置;
SpringBoot会从这四个位置全部加载主配置文件;互补配置;
2、项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;指定配置文件和默
认加载的这些配置文件共同起作用形成互补配置;
java -jar spring-boot-0.0.1-SNAPSHOT.jar --spring.config.location=E:/application.yml
(七)自动配置原理
SpringBoot启动的时候加载主配置类,开启了自动配置功能@EnableAutoConfiguration。
@EnableAutoConfiguration作用: