一.Spring配置⽂件作⽤
整个项⽬中所有重要的数据都是在配置⽂件中配置的,⽐如:数据库的连接信息(包含⽤户名和密码的设置);项⽬的启动端⼝;第三⽅系统的调⽤秘钥等信息;⽤于发现和定位问题的普通⽇志和异常⽇志等。想象⼀下如果没有配置信息,那么 Spring Boot 项⽬就不能连接和操作数据库,甚⾄是不能保存可以⽤于排查问题的关键⽇志,所以配置⽂件的作⽤是⾮常重要
二.配置文件格式
Spring Boot配置文件主要分为以下两个格式:
- .properties
- .yml
区别:
properties类型的配置文件是Spring Boot项目默认的文件格式,而yml是新兴的配置文件。
注意:
1.它们可以在同一个项目中,但是如果它们出现的同样的配置信息,优先按照 .properties配置文件,加载完.properties文件之后,才会加载.yml文件的配置信息。
2.理论上它们两个可以共存,但是为了便于维护降低故障率,通常采取统一的配置文件格式。
三.properties配置文件说明
3.1 properties 基本语法
# 配置项⽬端⼝号
server.port=8084
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
3.2读取配置文件
如果要主动读取配置文件中的内容,可以使用 @Value 注解实现
@Value 注解使用 "${}" 的格式读取
@Component
public class Properties
{
@Value("${server.port}")
private String port;
@PostConstruct
public void postConstruct() {
System.out.println("Read Properties,port:" + port);
}
}
@Component在spring Boot启动时会注入到框架中,注入到框架中时会执行,@PostConstruct初始化方法,这个时候能读到配置信息。
3.3 Properties缺点分析
properties配置以key-value的形式配置,冗余信息较多
四、yml 配置文件说明
yml的优点:
1.可读性搞,写法简单,便于理解,语法与JSON相似
2.支持更多数据类型
3.支持更多的编程语言,例如Golang,Python
4.1 yml 基础语法
yml是树形结构的配置文件,基础语法是“key: value” (用英文符号 冒号)且空格不可省略
基础语法:
#正确的配置方式
string:
datasource:
url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8
#yml对格式要求极其严格,冒号后面必须加一个空格,否则会报错
4.2 yml 配置不同的数据类型以及null
#字符串
string.value: Hello
#布尔值
boolean.value: true
boolean.value1: false
#整数
int.value: 10
int.value1: 0b1010_0111_0100_1010_1110 # ⼆进制
#浮点数
float.value: 3.14159
float.value1: 3114159e-5 #科学计数法
#null ,~代表null
null.value: ~
4.3 yml 配置读取
yml配置读取的方式与properties相同,使用@Value注解即可
@Component
public class Readyml
{
@Value("${server.port}")
private String port;
@PostConstruct
public void postConstruct() {
System.out.println("Read YML,port:" + port);
}
}
注意:
1.字符串默认不用加上单引号或者双引号
2.单引号会转义特殊字符,特殊字符最终还是一个普通的字符串数据
3.双引号不会转义字符串里的特殊字符,特殊字符会作为本身想表达的意思
4.4 yml 配置对象
yml也可配置对象:
student:
id: 1
name: java
age: 16
#或者行内写法
student: {id:1,name: java,age: 18}
这个时候不能用@Value来读取配置的对象了,只可用@ConfigurationProperties来读取
@ConfigurationProperties(prefix="student")
@Component
@GET
@SET
public class StudentComponent{
private int id;
private String name;
private int age;
//省略的getter和setter方法
}
以上代码:getter和setter方法不能省,这里为了篇幅就省略了
调用类的实现:
@Componentpublic class ReadYml2 {
@Autowiredprivate
StudentComponent studentComponent;
@PostConstruct
public void postConstruct() {
System.out.println(studentComponent);}
}
运行结果:
4.5 yml 配置集合
配置文件也可以配置list集合:
dbtypes:
name:
-mysql
-sqlserver
-db2
#行内写法
dbtypes: {name:[mysql,sqlserver,db2]}
与对象的读取方式一样,用@ConfigurationProperties来读取
@Component
@ConfigurationProperties("dbtypes")
@Data
public class ListConfig {
private List<String> name;}
打印类的实现:
@Component
public class ReadYml2 {
@Autowired
private ListConfig listConfig;
@PostConstruct
public void postConstruct() {
System.out.println(listConfig.getName());
}
}
五、properties VS yml
配置方式不同:
properties 是以key=value 形式配置键值类型的配置文件,yml 是类似 json 格式的树形配置方式进行配置的,yml 层间之间使用换行缩进的方式配置, key与value 之间 使用 “:”英文冒号+空格的方式设置,且空格不可省略。
数据大小不同:
properties是早期默认的配置文件格式,配置上有冗余数据,
而yml 可以解决数据冗余的问题。
兼容性不同:
yml通用性更好,支持多种语言,云服务器开发可以使用yml 一份配置文件作为Java和Go的共同配置文件, yml支持更多的数据类型。