当使用Spring Initializr构建springboot项目时,会自动在src/main/resources下生产application.properties文件。今天我们就来聊聊SpringBoot的配置文件。
配置文件的作用
SpringBoot采用“习惯优于配置”的理念,项目中存在大量的配置,采用默认配置,让你无需手动配置。
SpringBoot能够识别properties格式与yml格式的配置文件(我们一般使用yml格式更多)。当需要对默认配置进行修改或者自定义配置时可用通过修改配置文件达到目的。
配置文件的基本使用
这是使用yml格式的配置举例,说明application.yml中如何配置,以及代码中如何获取。
数字,字符串,布尔获取
配置文件写法:
version: 1.0
author: codhome.vip
flag: true
使用@Value获取:
@Value("${version}")
float version;
@Value("${author}")
String author;
//这里的true为默认值
@Value("${flag:true}")
boolean flag;
对象、Map写法与获取
配置文件写法:
user:
userName: codehome
age: 18
forbidden: true
使用@ConfigurationProperties获取:
@Configuration
@ConfigurationProperties(prefix = "user")
@Data
public class UserProperties {
String userName;
int age;
boolean forbidden;
}
//注入使用
@Autowired
UserProperties userProperties;
List、Set、Array获取
配置文件写法:
random: 10,20,30
使用@Value获取:
@Value("#{'${random}'.split(',')}")
int[] randoms; //List<Integer>也可以
配置文件写法:
random1:
users:
- zhangsao
- lisi
- wangwu
使用@ConfigurationProperties获取:
@Configuration
@ConfigurationProperties(prefix = "random1")
@Data
public class UserProperties {
List<String> users;
}
总结下两种注解区别
多环境配置
我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml,使用spring.profiles.active激活使用哪一个配置文件
spring:
profiles:
active: dev
---
#配置开发环境
spring:
profiles: dev
server:
port: 9000
---
#配置生产环境
spring:
profiles: prod
server:
port: 9100
---
#配置测试环境
spring:
profiles: dev
server:
port: 8000
配置文件优先级
项目内部配置文件
- application.properties 与application.yml同一个目录共存时,properties配置优先级更高
- ConfigFileApplicationListener中默认配置文件加载顺序
项目根目录config文件夹>根目录配置文件>resources下cofnig文件夹>resources下配置文件 - 当多个配置文件属性不冲突时,配置是互补的
- 也可以指定配置文件地址
java -jar run-0.0.1-SNAPSHOT.jar --spring.config.location=D:/application.properties
外部配置
- 操作系统环境变量(比如操作系统的username)
- RandomValuePropertySource配置的random.*属性值
- jar包外部的application-{profile}.properties配置文件
- jar包内部的application-{profile}.properties配置文件
- jar包外部的application.properties配置文件(此级别在测试环境经常使用。比如就在jar包同级目录放置一个配置文件,就内覆盖jar包内部所有的配置文件了)
- jar包内部的application.properties配置文件,由jar包外向jar包内进行寻找,优先加载待profile的,再加载不带profile的。
- @Configuration注解类上的@PropertySource(手动指定导入外部配置文件)
- 通过SpringApplication.setDefaultProperties指定的默认属性,自己程序代码里设置,优先级最低
千里之行,始于足下。这里是SpringBoot教程系列第五篇,所有项目源码均可以在我的GitHub上面下载源码。