0%

springboot配置文件

springboot配置文件

虽然springboot提供了一系列的默认配置,但是还是需要使用配置文件来进行一些自定义的配置

springboot中配置文件名称叫做application.properties或者application.yml

配置文件加载顺序

springboot 启动会扫描以下位置的application.properties/yml文件作为Spring boot的默认配置文件

  • file:./config/ 当前项目根目录下的config目录下

  • file:./ 当前项目根目录下

  • classpath:/config/ 项目resources目录下的config目录下

  • classpath:/ 项目resources目录下

优先级由高到底,高优先级的配置会覆盖低优先级的配置,SpringBoot会从这四个位置全部加载主配置文件

也可以使用命令行启动项目时通过spring.config.location来改变默认的配置文件位置,多个路径使用逗号隔开,可以使用-spring.config.name来指定文件的名字

指定外部配置文件

可以使用@PropertySource来指定除默认配置文件之外的配置

1
2
3
4
5
6
7
8
9
@PropertySources(
{
@PropertySource(value = "classpath:test.properties")
}
)
@Configuration
public class MainConfig4 {

}

自定义配置

对于自定义的配置,可以使用@ConfigurationProperties标注所属类来进行与配置文件映射,当然映射的前提是这个类要交由spring ioc容器进行管理,所以首先要将该类作为组件进行注册

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Component
@ConfigurationProperties(prefix = "custom")
public class CustomConfig {

private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

这样做虽然可以正常的获取配置,但是在进行配置的时候发现在进行配置的时候没有提示,凭什么人家的有提示,我的没有

加上这个依赖

1
2
3
4
5
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>

进行自定义类配置时也如德芙巧克力般丝滑了

这种方式默认是针对于默认的配置文件的,如果不想在默认配置文件中进行配置的话,还需要加上spring的@PropertySource注解来标明所对应的配置文件

bootstrap和application两种配置文件的区别

在 Spring Boot 中有两种上下文,一种是 bootstrap,另外一种是 application,application 配置文件主要用于 Spring Boot 项目的自动化配置;bootstrap 是应用程序的父上下文,也就是说 bootstrap 加载优先于 application

  • bootstrap 主要用于从额外的资源来加载配置信息,还可以在本地外部配置文件中解密属性
  • bootstrap 里面的属性会优先于application加载,且默认不能被本地相同配置覆盖

bootstrap应用场景

  • 使用spring cloud config配置中心时,需要在bootstrap中配置配置中心相关属性
  • 配置一些固定不能被覆盖的属性

配置加载加载顺序

优先级从上到下

  • 命令行参数
  • 来自java:comp/env的JNDI属性
  • java系统属性
  • 操作系统环境变量
  • RandomValuePropertySource配置的random.*属性值
  • jar包外部的application-{profile}.properties
  • jar包内部的application-{profile}.properties
  • jar包外部的application.properties
  • jar包内部的application.properties
  • @Configuration注解类上的@PropertySource
  • 通过SpringApplication.setDefaultProperties指定的默认属性

欢迎关注我的其它发布渠道