02-SpringBoot配置文件
一、配置文件
Spring Boot提供了两种常用的配置文件,分别是properties文件和yml文件。他们的作用都是修改Spring Boot自动配置的默认值。相对于properties文件而言,yml文件更年轻,也有很多的坑。可谓成也萧何败也萧何,yml通过空格来确定层级关系,使配置文件结构更清晰,但也会因为微不足道的空格而破坏了层级关系。
1.1、Properties配置文件
(1)、基本语法
#一行就是一个键值对(不推荐用空格隔开,虽然不会错)
key=value
(2)、注意事项
- 属性配置信息值可以换行,但键不可以换行。值换行用“\”表示。
- 同行多个键值对当作一个键值对处理
- properties配置文件在idea中默认utf-8可能会乱码
1.2、YAML配置文件
(1)、基本语法
key:(空格)value #表示一对键值对(空格必须有)
(2)、字面量(数字,字符串,布尔)
age: 10
name: "zhangsan \n" #双引号不转义字符串里面的特殊字符,即输出:张三 换行。反之单引号会发送转义
gender: true
(3)、对象、Map
在下一行来写对象的属性和值的关系,对象还是k: v的方式
friends:
lastName: zhangsan
age: 20
#行内写法
friends: {lastName: zhangsan,age: 18}
(4)、数组(List、Set)
pets:
- cat
- dog
- pig
#行内写法
pets: [cat,dog,pig]
二、加载配置文件
2.1、默认配置文件位置
Spring Boot启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件。
- file:./config/
- file:./
- classpath:/config/
- classpath:/
优先级由高到底,且高优先级的配置会覆盖低优先级的配置;
使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;指定配置文件和默认加载的这些配置文件共同起作用形成互补配置;
java -jar xxxx.jar --spring.config.location=G:/application.properties
2.2、ConfigurationProperties
/**
* 将配置文件中配置的每一个属性的值,映射到这个组件中
* @ConfigurationProperties:SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
* prefix = "person":配置文件中某一属性下的所有属性进行一一映射
*注意:
* 需要这个组件是容器中的组件。
* @ConfigurationProperties(prefix = "person")默认从全局配置文件中获取值
*/
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private Integer age;
private Boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
}
2.3、@PropertySource
/*
*@PropertySource(value = {"classpath:person.properties"}) 加载指定的配置文件。
*/
@Component
@PropertySource(value = {"classpath:person.properties"})
@ConfigurationProperties(prefix = "person")
public class Person {
@Email//配置文件注入值数据校验配置文件注入值数据校验
//@Value("${person.last-name}")
private String lastName;
//@Value("#{11*2}")
private Integer age;
//@Value("true")
private Boolean boss;
}
2.4、@ImportResource
导入Spring的配置文件,让配置文件里面的内容生效
@ImportResource(locations = {"classpath:beans.xml"})
三、Profile
(1)、实际开发中我们需要为不同的环境做不同的配置。
方式一:
我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml默认使用application.properties的配置;

方式二:
yml支持多文档块方式
server:
port: 8081
spring:
profiles:
active: prod
---
server:
port: 8083
spring:
profiles: dev
---
server:
port: 8084
spring:
profiles: prod #指定属于哪个环境
(2)、激活指定profile
方式一:
#在主配置文件中指定其它配置
spring:
profiles:
active: prod
方式二:
java -jar xxx.jar --spring.profiles.active=dev;
方式三:
三个参数选其一即可:
- VM options设置启动参数
-Dspring.profiles.active=prod - Program arguments设置
--spring.profiles.active=prod - Active Profile 设置
prod
四、外部配置加载顺序
SpringBoot也可以从以下位置加载配置; 优先级从高到低;高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置
-
命令行参数:
java -jar xxxx.jar --server.port=8087 --server.context-path=/abc多个配置用空格分开。 -
来自java:comp/env的JNDI属性
2.来自java:comp/env的JNDI属性
-
Java系统属性(System.getProperties())
-
操作系统环境变量
-
RandomValuePropertySource配置的random.*属性值
-
jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
由jar包外向jar包内进行寻找;
优先加载带profile
6.jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
-
jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件
-
jar包外部的application.properties或application.yml(不带spring.profile)配置文件
8.jar包外部的application.properties或application.yml(不带spring.profile)配置文件
-
jar包内部的application.properties或application.yml(不带spring.profile)配置文件
-
@Configuration注解类上的@PropertySource
10.@Configuration注解类上的@PropertySource
- 通过SpringApplication.setDefaultProperties指定的默认属性

浙公网安备 33010602011771号