SpringBoot基础--配置详解

TOC
  1. 1. 简介
  2. 2. 简单用法
    1. 2.1. 普通值
    2. 2.2. 对象
    3. 2.3. 数组
  3. 3. 配置文件注入
    1. 3.1. @ConfigurationProperties
    2. 3.2. @Value
    3. 3.3. 区别
    4. 3.4. @PropertySource
    5. 3.5. @ImportResource
  4. 4. Profile
  5. 5. 配置文件加载位置

简介

SpringBoot 使用约定大于配置的开发原则,减少人为配置,直接使用默认配置就能开发。SpringBoot 使用全局的配置文件,开发过程中可以修改配置文件来修改 SpringBoot 自动配置的默认值。在 SpringBoot 中配置文件名是固定的:

  • application.properties
  • application.yml

简单用法

普通值

k:value 形式,字符串默认不用加引号。

1
2
"" 双引号;不会转移特殊字符,\n会表示换行
'' 单引号;转移特殊字符,\n转义为字符

对象

1
2
3
friends:
name: xxx
age: 21
1
friends:{name:xxx, age:20}

数组

1
2
3
4
student:
- a
- b
- c
1
student:[a,b,c]

配置文件注入

@ConfigurationProperties

1
2
3
4
5
6
@Component
@ConfigurationProperties(prefix = "student")
public class Student {
private String name;
private Integer age;
}
1
2
3
student:
name: gavin
age: 20
  • @ConfigurationProperties 将类中的每一个属性与配置文件中的配置进行关联
  • prefix = “student” 表示配置文件中哪一个字段下面的属性
  • 必须加@Component,表示是容器中的组件

显示 Spring Boot Configutation annotation processor not found in classpath,可以添加下面的依赖,可以提示配置:

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

@Value

  • @Value(“#{}”) 可以使用 SpEL 表达式
  • @Value(“${}”)可以从配置文件中获取值,只可以获取单个值。
1
2
3
4
5
6
7
8
@Data
@Component
public class Student {
@Value("${student.name}")
private String name;
@Value("#{20}")
private Integer age;
}
1
2
student:
name: gavin

区别

@ConfigurationProperties @Value
功能 批量注入属性 单个属性指定
松散语法 支持 不支持
SpEL 不支持 支持
JSR303 数据校验 支持 不支持
复杂类型封装 支持 不支持
  • 松散语法是指:支持 frist-name,FristName,frist_name 等变量表示。@Value 只能和配置文件中的参数完全相等。

@PropertySource

@ConfigurationProperties(prefix = “student”)默认从全局配置文件中读取配置信息,也可以使用@PropertySource 指定 properties 文件来获取配置信息,注意@PropertySource 注解只能读取 properties 文件,不能读取 yml 文件。

1
2
3
4
5
6
@PropertySource(value = {"classpath:default.properties"})
@Component
@ConfigurationProperties(prefix = "student")
public class Student {
private String name;
}
1
2
//default.propertie文件
student.name: default

@ImportResource

SpringBoot 没有 Spring 配置文件,可以使用@ImportResource 注解加载 Spring 配置文件。

1
@ImportResource(locations = {"classpath:beans.xml"})

Profile

配置文件名字可以是 application-{profile}.properties/yml。默认使用 application.properties/yml 的配置。可以在主配置文件中使用下面语句激活指定 profile 来切换生产环境和开发环境。

1
spring.profiles.active=dev  

配置文件加载位置

SpringBoot 启动会依次扫描下面位置的 application.properties 或 application.yml 文件作为 SpringBoot 的配置文件。

1
2
3
4
-file:./config/          //file:项目根目录
-file:./
-classpath:/config/
-classpath:/

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