Spring Boot 配置文件
- Spring Boot 使用一个全局的配置文件,配置文件名是固定的
- application.properties
- 语法结构:key=value
- application.yaml/yml
- 语法结构:key:空格 value
- application.properties
- 配置文件的作用:修改 Spring Boot 自动配置的默认值
YAML
- YAML 是 “YAML Ain’t a Markup Language”( YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言),但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名
- YAML 对空格要求十分严格
- 可以配置以下数据
#普通键值
name: liming
#对象
student:
name: liming
age: 17
#对象行内写法
student: {name: liming,age: 17}
#数组
student:
- liming
- lihua
- libai
#数组行内写法
student: [liming,lihua,libai]
#简单判断并注入数据(去改配置文件中student对象的name值,如果不存在则取默认值libai)
name: ${student.name:libai}
#随机数(long,value,int,uuid等)
age: ${random}
- 也可以用于给实体类赋值
给实体类赋值的方法
@Value
- 在实体类中通过 @Value 给属性赋值
@Component
public class Dog {
@Value("小白白")
private String name;
@Value("3")
private Integer age;
}
- 使用 @Autowired 将实体类装配并测试
@SpringBootTest
class Springboot01ApplicationTests {
@Autowired
private Dog dog;
@Test
void contextLoads() {
System.out.println(dog);
}
}
@ConfigurationProperties
- 通过配置文件给属性赋值,将配置文件中配置的每一个属性的值,映射到这个组件中
- 告诉 springboot 将本类的所有属性和配置文件中相关的配置进行绑定
- 参数 prefix 取配置文件中与该实体类对应的类名
- 只有这个组件是容器中的组件(即标注 @Component 注解),才能使用容器提供的 @ConfigurationProperties 功能
- YAML 配置文件
person:
name: 小明
age: 22
happey: true
birthday: 1999/10/10
maps: {k1: v1,k2: v2}
lists: [music,readbook,games]
dog: {name: 灰灰,age: 3}
- 实体类
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private Integer age;
private boolean happy;
private Date birthday;
private Map<String ,Object> maps;
private List<Object> lists;
private Dog dog;
}
- 测试
@SpringBootTest
class Springboot01ApplicationTests {
@Autowired
private Person person;
@Test
void contextLoads() {
System.out.println(person);
}
}
@PropertySource
- 加载指定的配置文件
- 使用 SPEL 表达式取出
- properties 配置文件
name=小黑
- 实体类
@Component
@PropertySource(value = "classpath:application.properties")
public class Dog {
@Value("${name}")
private String name;
private Integer age;
}
- 测试
@SpringBootTest
class Springboot01ApplicationTests {
@Autowired
private Dog dog;
@Test
void contextLoads() {
System.out.println(dog);
}
}
YAML 和 properties 的区别
YAML | properties | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定(松散语法) | 支持 | 不支持 |
SPEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
松散绑定
- YAML 中的 user-name 和实体类中的 userName 可以匹配绑定
JSR303 数据校验
- 需要添加对应的启动器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
- @Validated 数据校验
- 在属性名上加上注解即可开启相应的属性格式校验
配置文件的位置选择
- 以下四个位置都可以编写配置文件,优先级依次下降
- file:./config/
- file:./
- classpath:/config/
- classpath:/
多环境配置
- profile 是 Spring 对不同环境提供不同配置功能的支持,可以通过激活不同的环境版本,实现快速切换环境
- 多个 YAML 配置文件可以写在一起(用 — 分隔),也可以分开编写
server:
port: 8081
#激活指定的配置模块
spring:
profiles:
active: dev
#(---)新建一个模块,可以看成另一个配置问阿金
---
#模块起名
spring:
profiles: test
server:
port: 8082
---
spring:
profiles: dev
server:
port: 8083
配置文件配置的内容
- 由 spring.factories 核心自动装配文件中的 xxxAutoConfiguration 自动装配默认值
- 可以通过修改 xxxAutoConfiguration 中 xxxProperties,改变默认值
- xxxProperties 与配置文件绑定,所以修改配置文件就自定义配置
#查看自动配置类的生效情况
debug: true