1. 介绍
- 官方配置文档
- 创建工程后默认在
resources
下有一个application.properties
文件
- 推荐将该文件改为
.yml
文件 - 名字默认为
application
,不建议修改
Spring Boot
通常使用两种格式的配置文件
application.properties
server.port=8080
server.servlet.context-path=/api/v1
application.yml
server:
port: 8080
servlet:
context-path: /api/v1
2. 常用配置文件位置
-
spring boot
的配置文件可以在classpath
下,也可以在指定的路径
下 - 加载顺序
- 首先在
classpath:/config/
查找配置文件 - 然后在
classpath:
下查找配置文件
- 当同级目录下同时有
application.properties
和application.yml
文件,properties
文件的属性会覆盖掉.yml
文件的属性
3. 获取自定义属性
@Value
单值获取
application.yml
user:
username: 老王
age: 18
email: abc@126.com
JavaBean
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Data
@Component
public class UserConfig {
@Value("${user.username}")
private String name;
@Value("${user.age}")
private Integer age;
@Value("${user.email}")
private String email;
}
- 单元测试
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
@Slf4j
@SpringBootTest
public class UserConfigTest {
@Resource
private UserConfig userConfig;
@Test
public void test() {
log.info(userConfig.toString());
}
}
结果:
之所以转为了Unicode
,是因为老王
没有加双引号。
- 注意
user:
username: 老王
age: 18
email: abc@126.com
address:
- 北京
- 上海
- 广州
-
username
的这个key
不能写成name
,不然获取的是电脑用户名 - 不能获取复杂类型的值,比如获取
address
的值报错
@ConfigurationProperties
批量获取
application.yml
user:
username: "老王"
age: 18
email: abc@126.com
address:
- "北京"
- '上海'
- "广州"
JavaBean
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.List;
@Data
@ConfigurationProperties("user")
@Component
public class UserConfig {
private String name;
private Integer age;
private String email;
private List<String> address;
}
- 单元测试
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
@Slf4j
@SpringBootTest
public class UserConfigTest {
@Resource
private UserConfig userConfig;
@Test
public void test() {
log.info(userConfig.toString());
}
}
结果:
上海
用了单引号''
依然转为了Unicode
。
- 注意
-
@ConfigurationProperties
可以获取集合的值 -
单引号''
依然会转码,双引号""
不会 - 要使用
@Component
或者@Configuration
将JavaBean
标记为配置类,配置才会生效
@Value
以及@ConfigurationProperties
对比
说明 | @ConfigurationProperties | @Value |
作用 | 批量获取配置文件中的属性 | 单值获取 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
- 松散语法
-
JavaBean
中的驼峰命名
,在yml
中用单词小写
跟-
连接 - 比如
private Strng contextPath
在yml
中可以对应为context-path
,也可以对应驼峰命名法
- 推荐在
yml
配置中使用松散语法,用于区分
4. 多配置文件
- 主配置文件文件名是
application-{profile}.properties/yml
,默认使用application.properties
的配置,推荐使用yml
配置
- 在项目的配置文件,可以为了
解耦
、生产测试
分开配置
# 主配置文件
application.yml
# druid 配置文件
application-druid.yml
# mybatis 配置文件
application-mybatis-plus.yml
# 开发环境配置文件
application-dev.yml
# 生产环境配置文件
application-prod.yml
- 两种方式指定配置文件
- 主配置文件
application.yml
中使用spring.profiles.active
属性指定
spring:
profiles:
active: dev,druid,mybatis-plus
- 项目打包为
jar
后,通过命令行参数的方式指定配置文件
java -jar app.jar --spring.profiles.active=prod