文章目录
一、配置文件作用
存放项目中比较重要的数据。
比如数据库的连接信息(包括用户名和密码设置)、项目的启动端口、第三方系统的调用密匙等信息、用于发现和排查定位问题的普通日志和异常日志等。
二、配置文件格式
SpringBoot配置文件主要分为两种格式.properties
和.yml
其中.properties类型的配置文件是默认的,两者可以同时存在,但实际开发中公司会规定使用哪一种。
properties类型的适合新手,不容易出错但是比较繁琐;yml比较简洁但是容易出错。一般初学使用前者,实际开发中后者使用居多。
下边详细说明,并进行对比。
三、properties配置文件说明
基本语法
键值形式:key=value
如:server.port=9090
读取配置文件
一般来讲,配置文件会随着spring容器的启动而自动加载,但是也可以主动读取配置文件中的内容,通过@Value注解实现。
使用方式:@Value+“${}”格式读取
例如:
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);
}
}
优缺点
优点 | 1.是默认的 2.优先级高于yml 3.写法简单,不易出错 |
---|---|
缺点 | 1.写法比较冗余 |
为什么说比较冗余呢?
看这几个配置项即可:
而同样的配置项在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);
}
}
注意:读取值为 null 的配置和根本不存在的配置结果不⼀致,是两回事,要注意区分。前者能正常启动而后者直接报错。
配置字符串的单双引号问题
准备工作:
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);
}
}
运行结果:
结论:
- 字符串默认不需要加单双引号
- 单引号中转义字符只是一个普通的字符串数据
- 双引号中,转义字符串会表达出来对应的特殊含义
配置对象
使用@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中添加代码:
运行结果:
另外,还可以配置集合读取集合,当然他也是使用@Configuration来做的
系统配置项很多,有需要查看官网即可
两种格式配置文件对比
- 语法格式上不同,properties使用=连接key和value,yml使用:+空格+换行缩进连接key和value
- 通用性上不同,yml支持更多语言
properties格式配置文件示例
补充:两种文件都可以使用#写注释
yml格式配置文件示例
设置不同环境配置文件演示
设置成开发环境的端口号:
设置成测试环境的端口号同样能启动: