目录
一.作用
在SpringBoot项目当中,所有的重要数据都是在配置文件中配置,最常见的就是连接数据库信息,启动端口等!
如上图,如果没有配置文件,SpringBoot项目就无法连接数据库,甚至不能排查问题的关键日志!
二.格式
在SpringBoot项目当中,配置文件主要是2种格式
- .properties:默认的文件格式
- .yml
两种方式都是同样的目的,只不过格式不一样。
2.1 properties 格式
.properties 文件是 Java 中常见的配置文件格式,它由一系列键值对组成,通常用于简单的配置需求。每行包含一个键值对,以等号连接。
示例:
# 配置项⽬端⼝号
server.port=8084
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=
utf8
spring.datasource.username=root
spring.datasource.password=root
配置形式:key = value;
优缺点:
-
有大量的冗余信息,例如:需要重复写Spring.datasource
-
易于人们理解和编辑,不需要特殊的工具或技能
-
支持多种数据类型
数据读取
如果我们主动读取配置文件,可以使用@Value注解实现!
格式:@value("${ }")
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
public class ReadYml {
@Value("${server.port}")
private String port;
@PostConstruct
public void postConstruct() {
System.out.println("Read YML,port:" + port);
}
}
2.2yml格式
yml 是 YAML 是缩写,使用的语法是" key: value" 在value前面,冒号后面需要添加一个空格!
spring:
datasource: //库名
url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8
username: root
password: root
优缺点分析:
- yml 是⼀个可读性⾼,写法简单、易于理解,它的语法和 JSON 语⾔类似。
- yml ⽀持更多的数据类型,它可以简单表达清单(数组)、散列表,标量等数据形态。它使⽤空⽩
- 符号缩进和⼤量依赖外观的特⾊,特别适合⽤来表达或编辑数据结构、各种配置⽂件等。
- yml ⽀持更多的编程语⾔,它不⽌是 Java 中可以使⽤在 Golang、PHP、Python、Ruby、 JavaScript、Perl 中
数据读取
读取方式和 properties 相同,使用@value("${ }")即可
2.3注意
字符串方面
配置文件中,默认的字符串不需要添加单引号或者双引号,但是添加了就是特殊的意思!
string:
str1: Hello \n Spring Boot.
str2: 'Hello \n Spring Boot.'
str3: "Hello \n Spring Boot."
执行结果:
单引号会转义特殊字符,双引号不会转义其中的特殊字符,会作为本身表示的意思!
对象方面
可以在yml当中配置对象!如下代码:
student:
id: 1
name: Java
age: 18
或者
student: {id: 1,name: Java,age: 18}
而我们知道读取配置的对象,我们需要使用@value("${ }"),但是此时此刻我们不能使用该方法,得使用另一个注解 @ConfigurationProperties
实现方式:
@ConfigurationProperties(prefix = "student")
@Component
@Data
public class StudentComponent {
private int id;
private String name;
private int age;
}
测试类:
@Component
public class ReadYml2 {
@Autowired
private StudentComponent studentComponent;
@PostConstruct
public void postConstruct() {
System.out.println(studentComponent);
}
}
结果:
list方面
和对象配置是一样的,读取是没有区别。
dbtypes:
name:
- mysql
- sqlserver
- db2
或者
dbtypes: {name: [mysql,sqlserver,db2]}
三.properties VS yml
- properties 是以 key=value 的形式配置的键值类型的配置⽂件,⽽ yml 使⽤的是类似 json 格式的 树形配置⽅式进⾏配置的,yml 层级之间使⽤换⾏缩进的⽅式配置,key 和 value 之间使⽤“: ”英⽂冒号加空格的⽅式设置,并且空格不可省略。
- properties 为早期并且默认的配置⽂件格式,但其配置存在⼀定的冗余数据,使⽤ yml 可以很好的解决数据冗余的问题。
- yml 通⽤性更好,⽀持更多语⾔,如 Java、Go、Python 等,如果是云服务器开发,可以使⽤⼀份配置⽂件作为 Java 和 Go 的共同配置⽂件。
- yml ⽀持更多的数据类型。