SpringBoot配置文件
SpringBoot配置文件
文章目录
- SpringBoot配置文件
- 配置文件的作用
- 配置文件格式
- 特殊说明
- properties配置文件说明
- 基本语法
- 读取文件
- 缺点分析
- yml配置文件说明
- 基本语法
- 键值对
- 数组(列表)
- 对象(映射)
- 布尔值
- 空值
- 字符串
- 注释
- 多行字符串
- 读取文件
- 补充:@ConfigurationProperties
- properties vs yml(yaml)
配置文件的作用
整个项目中所有重要的数据都是在配置文件中配置的,比如:
- 数据库的连接信息(包含用户名和密码的设置);
- 项目的启动端口;
- 第三方系统的调用秘钥等信息;
- 用于发现和定位问题的普通日志和异常日志等。
想象一下如果没有配置信息,那么 Spring Boot 项目就不能连接和操作数据库,甚至是不能保存可以用于排查问题的关键日志,所以配置文件的作用是非常重要的
配置文件格式
Spring Boot 配置文件主要分为以下两种格式:
- .properties
- .yml
如下图所示:
- application.properties 是默认创建的配置文件格式。而 application.yml(或 application.yaml)通常需要开发者根据需求自行创建
特殊说明
- 理论上讲 properties 可以和 yml 一起存在于一个项目当中,当 properties 和 yml 一起存在一个项目中时,如果配置文件中出现了同样的配置,比如 properties 和 yml 中都配置了“server.port”,那么这个时候会以 properties 中的配置为主,也就是 .properties 配置文件的优先级最高,但加载完 .properties 文件之后,也会加载 .yml 文件的配置信息
- 虽然理论上来讲 .properties 可以和 .yml 共存,但实际的业务当中,我们通常会采取一种统一的配置文件格式,这样可以更好的维护(降低故障率)。这就好像连锁店的服饰一样,不管是老款的服装还是新款的服装,一定要统一了才好看
properties配置文件说明
- properties配置文件是最早的配置文件格式,也是创建Spring项目默认的配置文件
基本语法
- 在.properties文件中,每行代表一个键值对,格式为 键=值 ,等号两边不能有空格(虽然部分情况下空格不影响读取,但不建议添加)
# 配置服务器端口
server.port=8080
# 配置应用名称
spring.application.name=my - spring - boot - app
读取文件
- 假如想读取properties配置文件中的内容,可以使用@Value注解来实现
- @Value注解使用“${}”,进行读取
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;@Component
public class ConfigReader {// 读取 server.port 属性@Value("${server.port}")private int serverPort;// 读取自定义属性 app.name@Value("${app.name}")private String appName;public void printConfig() {System.out.println("Server Port: " + serverPort);System.out.println("App Name: " + appName);}
}
缺点分析
.properties
文件作为Java项目(尤其是Spring Boot等框架)常用的配置格式,存在以下核心缺点:
- 可读性欠佳:无清晰层级结构,配置多且有层级时,难以直观体现数据关联,不如
.yml
通过缩进展现层次清晰。 - 复杂配置维护难:配置项增多时,冗长杂乱,查找、修改不便;且无内置模块化机制,不同模块配置难有效分组隔离。
yml配置文件说明
- yml 是 YAML 的缩写,它的全称 Yet Another Markup Language 翻译成中文就是“另一种标记语言”
- yml 是一个可读性高,易于理解,用来表达数据序列化的格式。它的语法和其他高级语言类似,并且可以简单表达清单(数组)、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件等
- yml 最大的优势是可以跨语言,不止是 Java 中可以使用,golang、python 都可以使用 yaml 作为配置文件
基本语法
YAML(YAML Ain’t Markup Language,即 YAML 不是标记语言)是一种可读性高、用来表达数据序列化的格式,在配置文件中被广泛使用。以下是 YAML 的基本语法:
键值对
- 语法格式:
键: 值
,注意冒号后面需要紧跟一个空格。 - 示例:
server:port: 8080host: localhost
上述示例中,server
是一个键,它的值是一个包含 port
和 host
两个键值对的对象 。
数组(列表)
- 短横线写法:使用短横线
-
加一个空格来表示数组元素。 - 示例:
fruits:- apple- banana- orange
fruits
是键,它的值是一个包含 apple
、banana
、orange
三个元素的数组。
- 方括号写法:也可以使用方括号
[]
来定义数组,元素之间用逗号分隔。
numbers: [1, 2, 3, 4, 5]
对象(映射)
- 语法格式:通过缩进表示层级关系,每个子键值对相对于父键值对有一定的缩进。
- 示例:
person:name: Johnage: 30address:city: New Yorkstreet: 123 Main St
person
是一个键,其值是一个对象,这个对象包含 name
、age
和 address
三个键值对,而 address
本身又是一个包含 city
和 street
键值对的对象。
布尔值
- 写法:
true
或false
,注意大小写。 - 示例:
enabled: true
debugMode: false
空值
- 写法:使用
null
表示空值,也可以用~
来表示。 - 示例:
description: null
optionalValue: ~
字符串
- 普通写法:直接写值,不需要引号。
message: Hello, World!
- 单引号写法:单引号内的特殊字符不会被转义。
string1: 'This is a \n newline character' # 输出会包含 \n
- 双引号写法:双引号内的特殊字符会被转义。
string2: "This is a \n newline character" # 输出会换行
注释
- 语法格式:使用
#
开头,直到行末的内容都是注释。 - 示例:
# 这是一个注释
server:port: 8080 # 配置服务器端口
多行字符串
- 字面量风格(
|
):保留换行符。
text: |This is a multi-linestring. It will keep theline breaks as they are.
- 折叠风格(
>
):折叠换行符,连续的换行符会被合并为一个空格。
text: >This is a multi-linestring. Multiple line breakswill be collapsed.
在Spring Boot项目中,application.yml
是常用的配置文件,通过上述语法可以方便地配置各种参数,如数据库连接、服务端口等信息
读取文件
- 与properties配置文件读取格式基本一致
- 都是使用@Value注解
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;@Component
public class YmlConfigReader {// 读取 server.port@Value("${server.port}")private int port;// 读取 app.name@Value("${app.name}")private String appName;public void printConfig() {System.out.println("端口: " + port);System.out.println("应用名称: " + appName);}
}
补充:@ConfigurationProperties
- @ConfigurationProperties:适用于配置一组相关的属性,如数据库连接配置、第三方服务的参数配置等场景,能够提高代码的可读性和可维护性
db:url: jdbc:mysql://localhost:3306/mydbusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driverimport org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@ConfigurationProperties(prefix = "db")
public class DbConfig {private String url;private String username;private String password;private String driverClassName;// 省略getter和setter
}
properties vs yml(yaml)
- properties 是以 key=value 的形式配置的键值类型的配置文件,而 yml 使用的是类似 json 格式的树形配置方式进行配置的,yml 层级之间使用换行缩进的方式配置,key 和 value 之间使用“:”英文冒号加空格的方式设置,并且空格不可省略
- properties 为早期并且默认的配置文件格式,但其配置存在一定的冗余数据,使用 yml 可以很好的解决数据冗余的问题
- yml 通用性更好,支持更多语言,如 Java、Go、Python 等,如果是云服务器开发,可以使用一份配置文件作为 Java 和 Go 的共同配置文件
- yml 虽然可以和 properties 共存,但一个项目中建议使用统一的配置类型文件