文章目录
- 一、配置文件作用
- 二、配置文件格式
- 三、properties配置文件说明
- 基本语法
- 读取配置文件
- 优缺点
- 四、yml配置文件说明
- 基本语法
- 使用yml连接数据库
- 使用yml配置不同数据类型及null
- yml配置的读取
- 配置字符串的单双引号问题
- 配置对象
- 两种格式配置文件对比
- properties格式配置文件示例
- yml格式配置文件示例
- 设置不同环境配置文件演示
一、配置文件作用
存放项目中比较重要的数据。
比如数据库的连接信息(包括用户名和密码设置)、项目的启动端口、第三方系统的调用密匙等信息、用于发现和排查定位问题的普通日志和异常日志等。
二、配置文件格式
SpringBoot配置文件主要分为两种格式.properties和.yml
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KxZ0dj8u-1691464486374)(F:\typora插图\image-20230509161053491.png)]](https://img-blog.csdnimg.cn/24115b4515dd4aaf96453839d4dd6bcc.png)
其中.properties类型的配置文件是默认的,两者可以同时存在,但实际开发中公司会规定使用哪一种。
properties类型的适合新手,不容易出错但是比较繁琐;yml比较简洁但是容易出错。一般初学使用前者,实际开发中后者使用居多。
下边详细说明,并进行对比。
三、properties配置文件说明
基本语法
键值形式:key=value
如:server.port=9090
读取配置文件
一般来讲,配置文件会随着spring容器的启动而自动加载,但是也可以主动读取配置文件中的内容,通过@Value注解实现。
使用方式:@Value+“${}”格式读取
例如:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WXzRnI8R-1691464486374)(F:\typora插图\image-20230509162213332.png)]](https://img-blog.csdnimg.cn/c014958da70642b5bb2434f4f59e1854.png)
package com.example.demo.component;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
public class ReadConfig {
@Value("${server.port}")
private String port;//这里接受类型一般是String,一般什么都能接收
@PostConstruct
public void postConstruct(){
System.out.println("Read Config:port:"+port);
}
}
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iM2ZNCz2-1691464486375)(F:\typora插图\image-20230509162248225.png)]](https://img-blog.csdnimg.cn/58217d71537442cd963701e17508d30b.png)
优缺点
| 优点 | 1.是默认的 2.优先级高于yml 3.写法简单,不易出错 |
|---|---|
| 缺点 | 1.写法比较冗余 |
为什么说比较冗余呢?
看这几个配置项即可:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-32gkGoZj-1691464486375)(F:\typora插图\image-20230509162550735.png)]](https://img-blog.csdnimg.cn/796ce6738a2148d697477b72589cc589.png)
而同样的配置项在yml格式下就会简便很多,如下所示:
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
username: root
password: root
四、yml配置文件说明
基本语法
key: value
例如:
server:
port: 9090
注意:冒号后边要加空格,不然不生效!!!!!
使用yml连接数据库
spring:
datasource:
url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8
username: root
password: root
使用yml配置不同数据类型及null
# 字符串
string.value: Hello
# 布尔值,true或false
boolean.value: true
boolean.value1: false
# 整数
int.value: 10
int.value1: 0b1010_0111_0100_1010_1110 # ⼆进制
# 浮点数
float.value: 3.14159
float.value1: 314159e-5 # 科学计数法
# Null,~代表null
null.value: ~
yml配置的读取
读取配置的⽅式和 properties 相同,使⽤ @Value 注解即可 。
注:这里需要把properties文件删了,不然读不到yml的配置
package com.example.demo.component;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
public class ReadConfig {
@Value("${server.port}")
private String port;//这里接受类型一般是String,一般什么都能接收
@PostConstruct
public void postConstruct(){
System.out.println("Read Config:port:"+port);
}
}
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ajDBvrYt-1691464486376)(F:\typora插图\image-20230509163606523.png)]](https://img-blog.csdnimg.cn/bec2de3a45fa46bea14ffcaf4af965e0.png)
注意:读取值为 null 的配置和根本不存在的配置结果不⼀致,是两回事,要注意区分。前者能正常启动而后者直接报错。
配置字符串的单双引号问题
准备工作:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CeRqRtH8-1691464486376)(F:\typora插图\image-20230509164434054.png)]](https://img-blog.csdnimg.cn/9acb4af3c60e42dcb30bbe702ec92d23.png)
package com.example.demo.component;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
public class ReadConfig {
@Value("${string.str1}")
private String str1;
@PostConstruct
public void postConstruct1(){
System.out.println("Read Config:str1"+str1);
}
@Value("${string.str2}")
private String str2;
@PostConstruct
public void postConstruct2(){
System.out.println("Read Config:str2"+str2);
}
@Value("${string.str3}")
private String str3;
@PostConstruct
public void postConstruct3(){
System.out.println("Read Config:str3"+str3);
}
}
运行结果:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JWrW2xGP-1691464486377)(F:\typora插图\image-20230509164407301.png)]](https://img-blog.csdnimg.cn/fc1ac680555b471cae1b166250f5f3d7.png)
结论:
- 字符串默认不需要加单双引号
- 单引号中转义字符只是一个普通的字符串数据
- 双引号中,转义字符串会表达出来对应的特殊含义
配置对象
使用@ConfigurationProperties注解:
package com.example.demo.component;
import lombok.Data;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@ConfigurationProperties(prefix = "student")
@Component
@Data
public class StudentComponent {
private int id;
private String name;
}
向ReadConfig中添加代码:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m9hBIiTQ-1691464486377)(F:\typora插图\image-20230509165612780.png)]](https://img-blog.csdnimg.cn/dac533f516ae4029957575cf692ed549.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4s7AvpDo-1691464486377)(F:\typora插图\image-20230509165510178.png)]](https://img-blog.csdnimg.cn/ef940c05ff7544f9a56a6d8f4b8e9564.png)
运行结果:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b5FoUC3V-1691464486378)(F:\typora插图\image-20230509165456316.png)]](https://img-blog.csdnimg.cn/d45cded08c984fbb941bbeb21fd50f33.png)
另外,还可以配置集合读取集合,当然他也是使用@Configuration来做的
系统配置项很多,有需要查看官网即可
两种格式配置文件对比
- 语法格式上不同,properties使用=连接key和value,yml使用:+空格+换行缩进连接key和value
- 通用性上不同,yml支持更多语言
properties格式配置文件示例
补充:两种文件都可以使用#写注释
![[外链图片转存中...(img-nlO4W1of-1691464486378)]](https://img-blog.csdnimg.cn/4cc63ba2392a4297ae1833e0558a819f.png)
yml格式配置文件示例
![[外链图片转存中...(img-NMJeoq0f-1691464486379)]](https://img-blog.csdnimg.cn/6fe87725a0a84ee9ad20ffb9a18bd0da.png)
设置不同环境配置文件演示
设置成开发环境的端口号:
![[外链图片转存中...(img-eoEoExdL-1691464486379)]](https://img-blog.csdnimg.cn/192dc73b68fc4d55887d886e49205b5c.png)
设置成测试环境的端口号同样能启动:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iRguo1V8-1691464486379)(F:\typora插图\image-20230509172024790.png)]](https://img-blog.csdnimg.cn/82a27395a54d4e228796847c9d3b233d.png)



















