SpringBoot-统一参数配置
SpringBoot-统一参数配置
SpringBoot工程下,进行统一的配置管理,你想设置的任何参数(端口号、项目根路径、数据库连接信息等等)都集中到一个固定位置和命名的配置文件(application.properties
或application.yml
)中!
配置文件应该放置在Spring Boot工程的src/main/resources
目录下。这是因为src/main/resources
目录是Spring Boot默认的类路径(classpath),配置文件会被自动加载并可供应用程序访问
使用SpringBoot提供的key
Spring提供一些固定的Key :: Spring Boot
例如:server.port=8080 启动端口号
server.port=8080
自定义key
我们也可以在配置文件中写一些自定义的key,用@value注解获取key的值
bsy.name=xiaobai
bsy.age=18
@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)格式就很适合写多层命名
server.port=8080
server.servlet.context-path=/
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属性配置文件中的前缀,分别给属性赋值,这样做有两个好处:
- 方便
- 可以给集合赋值
bsy:
user:
name: xiaobai
age: 18
girlfriend:
- xiaohong
- xiaolv
- xiaohuang
@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(开发)
spring:
jdbc:
datasource:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql:///dev
username: root
password: root
application-test.yml(测试)
spring:
jdbc:
datasource:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql:///test
username: root
password: root
application-prod.yml(生产)
spring:
jdbc:
datasource:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql:///prod
username: root
password: root
spring:
profiles:
active: dev # 通过更换active的value,实现不同的配置
优先级问题
当application-dev.yml 和 application.yml具有同样配置时,以外部文件(application-dev)为准
多环境配置
因为统一参数配置,application.yml会有特别多的key,把这些key归类提取不同的文件
再通过application.yml统一管理,同时激活多个配置文件
spring:
profiles:
active: dev,test