一、配置文件
配置文件的作用:修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给我们自动配置好了
SpringBoot使用一个全局的配置文件(配置文件名称是固定的)
有以下两种方式:
- 1)application.properties:语法结构:key=value
server.port=8081
- 2)application.yaml:语法结构 :key:空格value
server:
port: 8081
二、application.yaml配置文件
1. 了解yaml
YAML 是 “YAML Ain’t a Markup Language”(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言)。
yaml的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲(例如:许多电子邮件标题格式和yaml非常接近)。
yaml支持以下几种数据类型:
对象:
key:
child-key: value
child-key2: value2
数组:
pet:
- cat
- dog
- pig
//相当于:
pet: [cat,dog,pig]
2. 实体类赋值
步骤一:导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
步骤二:编写实体类
House.java:
package com.arlin.demo.pojo;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
@Data
@Component
public class House {
@Value("广东省广州市番禺区") //使用@Value注解方式赋值
private String address;
@Value("99999999")
private BigDecimal money;
}
Person.java:
package com.arlin.demo.pojo;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Data
@Component
@ConfigurationProperties(prefix = "person") //使用yaml方式赋值,与配置文件绑定
public class Person {
private String personName; //注意驼峰命名如何赋值
private Integer age;
private Boolean happy;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private House house;
}
第一种方式:@Value注解赋值
测试:
package com.arlin.demo;
import com.arlin.demo.pojo.House;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class DemoApplicationTests {
@Autowired
private House house;
@Test
void contextLoads() {
System.out.println(house); //House(address=广东省广州市番禺区, money=99999999)
}
}
第二种方式:以yaml配置方式赋值
application.yaml:
person:
person-name: arlin
age: 18
happy: false
birth: 2002/10/01
maps: {k1: v1, k2: v2}
lists:
- l1
- l2
- l3
house:
address: 广东省广州市番禺区
money: 99999999
测试:
package com.arlin.demo;
import com.arlin.demo.pojo.Person;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class DemoApplicationTests {
@Autowired
private Person person;
@Test
void contextLoads() {
System.out.println(person); //Person(personName=arlin, age=18, happy=false, birth=Tue Oct 01 00:00:00 CST 2002, maps={k1=v1, k2=v2}, lists=[l1, l2, l3], house=House(address=广东省广州市番禺区, money=99999999))
}
}
@ConfigurationProperties作用:
- 将配置文件中配置的每一个属性的值,映射到这个组件中
- 告诉springBoot将本类中的所有属性和配置文件中相关的配置进行绑定
- 参数 prefix = "person”:将配置文件中的person下面的所有属性——对应
- 只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能
3. yaml支持EL表达式
例如封装一个User类对象:
user:
#random.uuid:随机生成一个uuid
id: ${random.uuid}
#random.int:随机生成一个int
age: ${random.int}
#占位符:判断user.hello是否为null
# 是 输出{{user.hello}}_01
# 否 输出hello_01
name: ${user.hello:hello}_01
4. application配置文件可以放的位置
官网:
- 可以放在项目名下新建的config文件目录下
- 项目名下新建的config文件目录下的子目录下
- 项目名下
- resource目录的config目录下
- resource目录下
优先级依次递减
三、 多环境配置
① 分多个文件配置不同环境
application.yaml:
spring:
profiles:
active: dev
application-dev.yaml:
server:
port: 8081
application-test.yaml:
server:
port: 8082
② 这里properties和yaml类似,不同的是yaml还可以在同一个文件中分模块,不需要多个文件。
application.yaml:
spring:
profiles:
active: dev
---
server:
port: 8081
spring:
profiles: dev
---
server:
port: 8082
spring:
profiles: test