一、简介
当创建完工程之后默认在工程的sources目录下会有一个application.properties的配置文件,在该配置文件中可以指定我们工程中的不变的属性,名字一般是固定的死的(不建议修改);springboot支持两个格式的配置:
- application.properties
- application.yml
properties
server.port=9000
server.servlet.context-path=/api
server.address=127.0.0.1
yml
server:
port: 8000
servlet:
context-path: /api
address: 127.0.0.1
二、常用配置文件位置
2.1说明
Spring boot 的配置文件可以在classpath下也可以是从指定的file路径下
2.2加载顺序
- classpath:/config/
- classpath:/
-
springboot
首先会从classpath
下的/config
目录下查找配置文件, 然后在classpath的根目录查找,查找的顺序/config
优于classpath -
当同级目录同时有
application.properties
和application.yml
,那么application.properties
里面的属性就会覆盖application.yml
里的属性。
三、读取YML文件属性
Spring Boot提供自定义配置组件,但有些时候我们需要在配置文件自定义一些属性,那我们如何获取这些自定义的属性的值呢?
application.yml
user:
name: 测试自定义属性
address:
- 上海
- 北京
- 深圳
- 武汉
- 长沙
detail:
phone: 130xxx
3.1 单个值获取
使用@Value注解,可以在程序的任意类中使用,当我们只需要配置属性的单个值的时候可以使用@Value
public class TestConfiguration{
@Value("${user.name}")
private String name;
@Value("${user.detail.phone}")
private String phone;
}
3.2 一次性加载
当配置的值比较多的时候,我们可以使用@ConfigurationProperties注解一次性将配置文件中配置的每一个属性的值,映射到这个组件中
在pom.xml中导入
<!--导入配置文件处理器,配置文件进行绑定就会有提示-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
// 或者@Configuration
@Component
@ConfigurationProperties("user")
@Data
public class User {
private Map<String,String> detail;
private List<String> address;
private String name;
}
@ConfigurationProperties
-
该注解向Spring Boot声明该类中的所有属性和配置文件中相关的配置进行绑定。
-
prefix = "user":声明配置前戳,将该前戳下的所有属性进行映射。
-
@Component 或者@Configuration:将该组件加入Spring Boot容器,只有这个组件是容器中的组件,配置才生效。
两种方式对比
说明 | @ConfigurationProperties | @Value |
---|---|---|
作用 | 批量注入配置文件中的属性 | 单个指定 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
自动提示功能
在idea中开启
image五、读取properties文件属性
5.1 新建一个user.properties
user.name=小王
user.age=18
user.sex=男
5.2 读取
@PropertySource("classpath:user.properties") //指定properties文件的位置
public class User{
@Value("${user.name}")
private String name;
@Value("${user.age}")
private int age;
@Value("${user.sex}")
private String sex;
}
六、多配置文件
说明
我们在主配置文件编写的时候,文件名也可以是 application-{profile}.properties/yml,默认使用application.properties的配置
例如我们的一个项目基本的会有三种环境,开发dev,测试test,生产 produce。每个环境下的配置文件的内容都会不同,所以需要在不同环境下使用不同的配置文件
4.1 配置文件
application-pro.yml
server:
port: 8080
application-dev.yml
server:
port: 8081
application-test.yml
server:
port: 8082
4.2 激活配置文件
激活配置文件的方式有两种
一种在主配置文件application.yml中 使用spring.profiles.active 属性指定使用哪个配置文件
spring:
profiles:
active: dev
另外一种打包后可以通过命令行参数的方式指定配置文件
java -jar app.jar --spring.profiles.active=dev
网友评论