1、Spring Boot 配置⽂件有以下三种:
(1)application.properties
(2)application.yml
(3)application.yaml
2、yml 为yaml的简写, 实际开发中出现频率最⾼. yaml 和yml 的使⽤⽅式⼀样
3、
4、
当
.properties
和
.yml
并存时,两个配置都会加载. 如果配置⽂件内容有冲突, 则以
.properties
为主, 也就是
.properties
优先级更⾼
5、properties 是以键值的形式配置的,key 和 value 之间是以"="连接的
# 配置项⽬端⼝号
server.port=8080
#配置数据库连接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&
spring.datasource.username=root
spring.datasource.password=root
6、如果在项⽬中,想要主动的读取配置⽂件中的内容,可以使⽤ @Value 注解来实现,@Value 注解使⽤" ${} "的格式读取
mykey.key1 = bite
import org.springframework.beans.factory.annotation.Value;
2 import org.springframework.web.bind.annotation.RequestMapping;
3 import org.springframework.web.bind.annotation.RestController;
4
5 @RestController
6 public class PropertiesController {
7 @Value("${mykey.key1}")
8 private String key1;
9
10 @RequestMapping("/key")
11 public String key(){
12 return "读取到值:"+key1;
13 }
14 }
7、properties 缺点时具有较多的冗余信息(想要解决这个问题,就可以使⽤ yml 配置⽂件的格式化了)
8、
yml 是树形结构的配置⽂件,它的基础语法是"key: value",
key 和 value 之间使⽤英⽂冒号加空格的⽅式组成,
空格不可省略
spring:
datasource:
url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8&useSSL=false
username: root
password: root
9、两者对比
10、yml 配置不同数据类型及 null
# 字符串
string.value: Hello
# 布尔值,true或false
boolean.value: true
boolean.value1: false
# 整数
int.value: 10
# 浮点数
float.value: 3.14159
# Null,~代表null
null.value: ~
# "" 空字符串
#, 直接后⾯什么都不加就可以了, 但这种⽅式不直观, 更多的表⽰是使⽤引号括起来
empty.value:''
11、yml 读取配置的⽅式和 properties 相同,使⽤ @Value 注解即可
12、字符串默认不⽤加上单引号或者双引号,如果加英⽂的单双引号可以表⽰特殊的含义
string:
str1: Hello \n Spring Boot.
str2: 'Hello \n Spring Boot.'
str3: "Hello \n Spring Boot."
(1)字符串默认不⽤加上单引号或者双引号。
(2)单引号会转义特殊字符,使其失去特殊功能, 始终是⼀个普通的字符串.
(3)双引号不会转义字符串⾥⾯的特殊字符, 特殊字符会表⽰本⾝的含义
13、
我们还可以在 yml 中配置对象,如下配置
(1)第一种
student:
id: 1
name: Java
age:18
(2)第二种
student: {id: 1,name: Java,age: 18}
(3)这个时候就不能⽤ @Value 来读取配置中的对象了,此时要使⽤另⼀个注解
@ConfigurationProperties
来读取
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@ConfigurationProperties(prefix = "student")
@Component
@Data
public class Student {
private int id;
private String name;
private int age;
}
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@ConfigurationProperties(prefix = "student")
@Component
@Data
public class Student {
private int id;
private String name;
private int age;
14、配置⽂件也可以配置 list 集合
(1)集合的读取和对象⼀样,也是使⽤ @ConfigurationProperties 来读取的
@Component
@ConfigurationProperties("dbtypes")
@Data
public class ListConfig {
private List<String> name;
}
@RestController
public class ReadYml2 {
@Autowired
private ListConfig listConfig;
@RequestMapping("/readList")
public String readList(){
return listConfig.toString();
}
}
15、配置⽂件也可以配置 map
(1)第一种写法
(2)第二种写法
@Component
@ConfigurationProperties("maptypes")
@Data
public class MapConfig {
private HashMap<String,String> map;
}
@RestController
public class ReadYml2 {
@Autowired
private MapConfig mapConfig;
@RequestMapping("/readMap")
public String readStudent(){
return mapConfig.toString();
}
}
16、yml缺点
不适合写复杂的配置⽂件
(1)如properties复杂文件格式
keycloak.realm = demo
keycloak.resource = fm-cache-cloud
keycloak.credentials.secret = d4589683-Oce7-4982-bcd3
keycloak.security[0].authRoles[0]= user
keycloak.security[0].collections[0].name = ssologinurl
keycloak.security[0].collections[0].patterns[0] = /login/*
(2)yml格式(太过复杂)
keycloak:
realm: demo
resource: fm-cache-cloud
credentials:
secret: d4589683-Oce7-4982-bcd3
security:
- authRoles:
- user
collections:
- name: ssologinurl
patterns:
- /login/*
17、yml的优点
(1)可读性⾼,写法简单, 易于理解
(2)⽀持更多的数据类型, 可以简单表达对象, 数组, List,Map等数据形态.
(3) ⽀持更多的编程语⾔, 不⽌是Java中可以使⽤, 在Golang, Python, Ruby, JavaScript中也可以使⽤
18、总结
(1)properties 是以 key=value 的形式配置的键值类型的配置⽂件, yml 使⽤的是树形配置⽅式.
(2)读取配置⽂件内容, 使⽤ @Value 注解, 注解内使⽤" ${} "的格式读取.
(3)yml 层级之间使⽤换⾏缩进的⽅式配置, key 和 value 之间使⽤": "(英⽂冒号)加空格的⽅式设置, 并 且空格不可省略.
(4)properties 为早期并且默认的配置⽂件格式, 其配置存在⼀定的冗余数据, 使⽤ yml 可以很好的解决 数据冗余的问题, 但不适合复杂配置.
(5)yml 可以和 properties 共存,但⼀个项⽬中建议使⽤⼀种配置类型⽂件.