SpringBoot-统一参数配置

SpringBoot-统一参数配置

SpringBoot工程下,进行统一的配置管理,你想设置的任何参数(端口号、项目根路径、数据库连接信息等等)都集中到一个固定位置和命名的配置文件(application.propertiesapplication.yml)中!

配置文件应该放置在Spring Boot工程的src/main/resources目录下。这是因为src/main/resources目录是Spring Boot默认的类路径(classpath),配置文件会被自动加载并可供应用程序访问


使用SpringBoot提供的key

Spring提供一些固定的Key :: Spring Boot

例如:server.port=8080 启动端口号

1
server.port=8080

自定义key

我们也可以在配置文件中写一些自定义的key,用@value注解获取key的值

1
2
bsy.name=xiaobai
bsy.age=18
1
2
3
4
5
6
7
8
9
@RestController
@RequestMapping("hello")
public class HelloController {
@Value("${bsy.name}")
private String name;
@Value("${bsy.age}")
private int age;
}
}

Yaml

application配置文件是SpringBoot为所有的配置提供参数的位置,所以必须保证key不重复

为此,SpringBoot采取了多层命名的方式

然而,properties配置文件写多层命名会特别麻烦,而yml(yaml)格式就很适合写多层命名

1
2
server.port=8080
server.servlet.context-path=/
1
2
3
4
server:
port: 8080
servlet:
context-path: /

yaml格式介绍

YAML 和 YML 是同一个文件格式的不同文件扩展名

YAML(YAML Ain’t Markup Language)是一种基于层次结构的数据序列化格式,旨在提供一种易读、人类友好的数据表示方式。

.properties文件相比,YAML格式有以下优势:

  • 层次结构

  • 自我描述性

  • 注释支持

  • 多行文本

  • 类型支持

  • 更好的可读性


yaml语法说明

  • 数据结构用树形结构呈现,通过缩进来表示层级,

  • 如果key有多个value(集合)通过减号 ” - ” 来表示

  • 键值结构里面的key/value对用冒号 ” : ” 来分隔,如果存在value,需要加空格

  • YAML配置文件的扩展名是yaml 或 yml


配置文件-读取数据

@Value读取数据的方式也是有很多缺点的:

  • key必须写全
  • 只能读取单个值,比如单key多value的集合无法读取

@ConfigurationProperties

为了解决这个问题,SpringBoot提供了@ConfigurationProperties注解

通过prefix属性配置文件中的前缀,分别给属性赋值,这样做有两个好处:

  • 方便
  • 可以给集合赋值
1
2
3
4
5
6
7
8
bsy:
user:
name: xiaobai
age: 18
girlfriend:
- xiaohong
- xiaolv
- xiaohuang
1
2
3
4
5
6
7
@Data
@ConfigurationProperties(prefix = "bsy.user")
public class user {
private String name;
private int age;
private List<String> girlfriend;
}

动态配置文件

在Spring Boot中,可以使用多环境配置来根据不同的运行环境(如开发、测试、生产)加载不同的配置

SpringBoot支持多环境配置让应用程序在不同的环境中使用不同的配置参数

以下是实现Spring Boot多环境配置的常见方法:

  • 属性文件分离

  • YAML配置文件

  • 命令行参数(动态)

application-dev.yml(开发)

1
2
3
4
5
6
7
spring:
jdbc:
datasource:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql:///dev
username: root
password: root

application-test.yml(测试)

1
2
3
4
5
6
7
spring:
jdbc:
datasource:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql:///test
username: root
password: root

application-prod.yml(生产)

1
2
3
4
5
6
7
spring:
jdbc:
datasource:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql:///prod
username: root
password: root
1
2
3
spring:
profiles:
active: dev # 通过更换active的value,实现不同的配置

优先级问题

当application-dev.yml 和 application.yml具有同样配置时,以外部文件(application-dev)为准

多环境配置

因为统一参数配置,application.yml会有特别多的key,把这些key归类提取不同的文件

再通过application.yml统一管理,同时激活多个配置文件

1
2
3
spring:
profiles:
active: dev,test

SpringBoot-统一参数配置
http://blog.170827.xyz/2024/06/30/SpringBoot-统一参数配置/
作者
XIAOBAI
发布于
2024年6月30日
许可协议