Springboot配置文件
Springboot 配置文件详解
Springboot配置文件支持 properties
和 yml
两种文件格式
1. 自定义配置属性
application.properties
custom.name=testv1
custom.pwd=1666
custom.roles[0]=admin
custom.roles[1]=admins
CustomProperties.java
@Data
@ConfigurationProperties(prefix = "custom")
public class CustomProperties {
private String name;
private String pwd;
private List<String> roles;
}
单独使用@ConfigurationProperties
的话依然无法直接使用配置对象
因为它并没有被注册为SpringBean
。我们可以通过三种方式来使得它生效。
-
在
CustomProperties
配置类中添加@Component
/@Configuration
注解注入 -
使用
@EnableConfigurationProperties
注解@EnableConfigurationProperties({CustomProperties.class})
注入 -
Spring Boot 2.2.0.RELEASE提供了一个扫描注解
@ConfigurationPropertiesScan
可以扫描特定包下所有的被@ConfigurationProperties
标记的配置类,并将它们进行IoC注入
2. 配置文件注入值数据校验
CustomProperties.java
@Data
@Validated
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "custom")
public class CustomProperties {
@Size(min = 6,max = 12,message = "name error")
private String name;
@Pattern(regexp = "^1.*",message = "pwd error")
private String pwd;
@Size(min = 1,max = 9,message = "roles error")
private List<String> roles;
}
不符合校验规则的将在启动时报错
另:Springboot 2.3.0 及以上版本将参数校验模块抽出为一个单独项目
spring-boot-starter-validation
Springboot 2.3.0 及以上版本使用配置文件注入值数据校验时应添加如下依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
3. 自定义配置文件
custom.properties
custom.name=testv1
custom.pwd=1666
custom.roles[0]=admin
custom.roles[1]=admins
CustomProperties.java
@Data
@Validated
@ConfigurationProperties(prefix = "custom")
@PropertySource("classpath:custom.properties")
public class CustomProperties {
@Size(min = 6,max = 12,message = "name error")
private String name;
@Pattern(regexp = "^1.*",message = "pwd error")
private String pwd;
@Size(min = 1,max = 9,message = "roles error")
private List<String> roles;
}
4. 自定义属性自动提示
加入如下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
若是依旧无法自动提示,可以尝试开启IDE的Annonation Processing
5. 多配置文件
- 编写多配置文件时 要遵循:
application-{profile}.properties/yml
格式 - yml配置文件多块
server: port: 8888 spring: profiles: active: dev #指定使用哪个环境 --- server: port: 8880 spring: profiles: dev #指定属于哪个环境 --- server: port: 8881 spring: profiles: prod #指定属于哪个环境
3. 激活指定profile
1. 在 `application.properties` 配置文件中配置 `spring.profiles.active=dev` 指定profile
2. 命令行中指定参数配置 eg: `java -jar demo.jar --spring.profiles.active=dev`
3. JVM参数 eg: `-Dspring.profiles.active=dev`
6. 配置文件加载位置
springboot 启动会扫描以下位置的application.properties
或者application.yml
文件作为Spring boot的默认配置文件
- 项目根目录中config目录下
- 项目根目录下
classpath:/config/
目录下classpath
下
序号越小配置文件优先级别越高,同时存在properties
和yml
文件的情况下,优先加载properties
文件
7. 配置的生效顺序
- 开发者工具
Devtools
全局配置参数; - 单元测试上的
@TestPropertySource
注解指定的参数; - 单元测试上的
@SpringBootTest
注解指定的参数; - 命令行指定的参数,如
java -jar springboot.jar --server.port=8899
; - 命令行中的
SPRING_APPLICATION_JSONJSON
指定参数, 如java -Dspring.application.json='{"name":"Java技术栈"}' -jar springboot.jar
ServletConfig
初始化参数;ServletContext
初始化参数;- JNDI参数(如
java:comp/env/spring.application.json
); - Java系统参数(来源:
System.getProperties()
); - 操作系统环境变量参数;
RandomValuePropertySource
随机数,仅匹配:ramdom.*
;- JAR包外面的配置文件参数(
application-{profile}.properties(YAML)
) - JAR包里面的配置文件参数(
application-{profile}.properties(YAML)
) - JAR包外面的配置文件参数(
application.properties(YAML)
) - JAR包里面的配置文件参数(
application.properties(YAML)
) @Configuration
配置文件上@PropertySource
注解加载的参数;- 默认参数(通过
SpringApplication.setDefaultProperties
指定);
Config New
首先加载内置默认的配置文件,包括application.properties
和application.yml
。
然后根据以下顺序加载外部配置文件:
a. 位于操作系统用户主目录下的config文件夹中的application.properties
或application.yml
文件。
b. 位于jar包外部的application.properties
或application.yml
文件。
c. 位于jar包内部的application.properties
或application.yml
文件。
注意:如果有多个配置文件,后加载的配置文件会覆盖先加载的配置文件。
可以通过在命令行中使用--spring.config.name
和--spring.config.location
参数来指定配置文件的名称和位置,这样可以覆盖默认的配置文件和外部配置文件的加载顺序和位置。
在多个配置文件中,相同的属性将按照以下顺序进行覆盖:
在高优先级配置文件中指定的属性将覆盖低优先级配置文件中指定的属性。
在相同优先级的配置文件中,后加载的配置文件将覆盖先加载的配置文件中指定的属性。
8. 读取特定配置
@Value("${server.port}")
private Integer port;
9. 禁用特定的配置类
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
本文默认启用
@ConfigurationPropertiesScan
注解
参考资料
- 最全面的SpringBoot配置文件详解 - 知乎
- Spring Boot 配置加载顺序详解 - 知乎
- SpringBoot配置文件详解 - CharlesWone - 博客园
- SpringBoot配置文件加载顺序_scorpio的博客-CSDN博客_springboot配置文件加载顺序
- Spring Boot 中文文档 - Spring Boot 2.1.1.RELEASE Reference | Docs4dev
- 关与 @EnableConfigurationProperties 注解 - 简书
- Developing with Spring Boot
- Spring Boot Reference Documentation
- Spring Boot读取配置属性的常用方式 - 云+社区 - 腾讯云