4. properties配置⽂件说明
properties配置⽂件是最早期的配置⽂件格式,也是创建SpringBoot项⽬默认的配置⽂件
4.1 properties基本语法
properties是以键值的形式配置的,key和value之间是以"="连接的,如
java
# 配置项⽬端⼝号
server.port=8080
#配置数据库连接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?
characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
PS:⼩技巧:配置⽂件中使⽤"#"来添加注释信息。
更多配置信息随着课堂练习再学习.感兴趣的也可以参考官⽹:Spring Boot配置。
4.2 读取配置⽂件
如果在项⽬中,想要主动的读取配置⽂件中的内容,可以使⽤@Value 注解来实现。
@Value 注解使⽤" ${} "的格式读取,如下代码所⽰
properties配置如下:
java
mykey.key1 = bite
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class PropertiesController {
@Value("${mykey.key1}")
private String key1;
@RequestMapping("/key")
public String key(){
return "读取到值:"+key1;
}
}
最终执⾏效果:

4.3 properties 缺点分析
properties配置是以key-value的形式配置的,如下图所⽰:

从上述配置key看出,properties配置⽂件中会有很多的冗余的信息,⽐如这些:

想要解决这个问题,就可以使⽤yml配置⽂件的格式化了.
5. yml 配置⽂件说明
yml是YAML是缩写,它的全称YetAnotherMarkupLanguage翻译成中⽂就是"另⼀种标记语⾔. 我们先来学习yml的语法
5.1 yml 基本语法
yml是树形结构的配置⽂件,它的基础语法是"key:value".
key和value之间使⽤英⽂冒号加空格的⽅式组成,空格不可省略
基础语法如下:

第⼀项的配置为正确的,key也是⾼亮显⽰的.第⼆项没有空格是错误的使⽤⽅式,第⼆项的key也 没有⾼亮显⽰
使⽤ yml 连接数据库
yml使⽤⽰例:
java
spring:
datasource:
url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8&useSSL=false
username: root
password: root


5.2 yml 使⽤进阶
5.2.1 yml 配置不同数据类型及 null
java
# 字符串
string.value: Hello
# 布尔值,true或false
boolean.value: true
boolean.value1: false
# 整数
int.value: 10
# 浮点数
float.value: 3.14159
# Null,~代表null
null.value: ~
# "" 空字符串
#, 直接后⾯什么都不加就可以了, 但这种⽅式不直观, 更多的表⽰是使⽤引号括起来
empty.value: ''
5.2.1.1 yml 配置读取
yml读取配置的⽅式和properties相同,使⽤@Value注解即可,实现代码如下:
yml配置:
java
string:
hello: bite
@RestController
public class ReadYml {
@Value("${string.hello}")
private String hello;
@RequestMapping("/ymlKey")
public String key(){
return "读取到值:"+hello;
}
}
访问:http://127.0.0.1:8080/ymlKey
运⾏结果:

5.2.1.2 注意事项:value值加单双引号
字符串默认不⽤加上单引号或者双引号,如果加英⽂的单双引号可以表⽰特殊的含义。 尝试在application.yml中配置如下信息:
string:
str1: Hello \n Spring Boot.
str2: 'Hello \n Spring Boot.'
str3: "Hello \n Spring Boot."
读取程序实现代码如下:
java
@RestController
public class ReadYml {
@Value("${string.str1}")
private String str1;
@Value("${string.str2}")
private String str2;
@Value("${string.str3}")
private String str3;
@RequestMapping("/yml")
public String readYml(){
System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
return "yml";
}
}
以上程序的执⾏结果如下图所⽰:

从上述结果可以看出:
• 字符串默认不⽤加上单引号或者双引号。
• 单引号会转义特殊字符,使其失去特殊功能,始终是⼀个普通的字符串.
• 双引号不会转义字符串⾥⾯的特殊字符,特殊字符会表⽰本⾝的含义.
此处的转义理解起来会有些拗⼝,\n本意表⽰的是换⾏
使⽤单引号会转义,就是说,\n不再表⽰换⾏了,⽽是表⽰⼀个普通的字符串
使⽤双引号不会转义,表⽰\n表⽰的是它本⾝的含义,就是换⾏
JavaEE的学习重在理解和使⽤,不纠结概念和描述
5.2.2 配置对象
我们还可以在yml中配置对象,如下配置:
java
student:
id: 1
name: Java
age: 18
或者是使⽤⾏内写法(与上⾯的写法作⽤⼀致):
java
student: {id: 1,name: Java,age: 18}
这个时候就不能⽤@Value来读取配置中的对象了,此时要使⽤另⼀个注解 @ConfigurationProperties 来读取,具体实现如下:
java
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;
}
调⽤类的实现如下:
java
@RestController
public class StudentController {
@Autowired
private Student student;
@RequestMapping("/readStudent")
public String readStudent(){
return student.toString();
}
}
访问http://127.0.0.1:8080/readStudent 运⾏结果如下:

5.2.3 配置集合
配置⽂件也可以配置list集合,如下所⽰:
java
dbtypes:
name:
- mysql
- sqlserver
- db2
集合的读取和对象⼀样,也是使⽤@ConfigurationProperties 来读取的,具体实现如下:
java
@Component
@ConfigurationProperties("dbtypes")
@Data
public class ListConfig {
private List<String> name;
}
访问集合的实现如下:
java
@RestController
public class ReadYml2 {
@Autowired
private ListConfig listConfig;
@RequestMapping("/readList")
public String readList(){
return listConfig.toString();
}
}
5.2.4 配置Map
配置⽂件也可以配置map,如下所⽰:
java
maptypes:
map:
k1: kk1
k2: kk2
k3: kk3
或者是使⽤⾏内写法(与上⾯的写法作⽤⼀致):
java
maptypes: {map: {k1: kk1,k2: kk2, k3: kk3}}
Map的读取和对象⼀样,也是使⽤@ConfigurationProperties 来读取的,具体实现如下:
java
@Component
@ConfigurationProperties("maptypes")
@Data
public class MapConfig {
private HashMap<String,String> map;
}
打印类的实现如下
java
@RestController
public class ReadYml2 {
@Autowired
private MapConfig mapConfig;
@RequestMapping("/readMap")
public String readStudent(){
return mapConfig.toString();
}
}
5.3 yml优缺点
优点:
-
可读性⾼,写法简单,易于理解
-
⽀持更多的数据类型,可以简单表达对象,数组,List,Map等数据形态.
-
⽀持更多的编程语⾔,不⽌是Java中可以使⽤,在Golang,Python,Ruby,JavaScript中也可以使⽤
缺点:
- 不适合写复杂的配置⽂件
⽐如properties格式如下
java
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/*
转换为yml
java
keycloak:
realm: demo
resource: fm-cache-cloud
credentials:
secret: d4589683-Oce7-4982-bcd3
security:
- authRoles:
- user
collections:
- name: ssologinurl
patterns:
- /login/*
转换的过程也⽐较花费精⼒,如果配置更复杂⼀点,可读性会更差,代码也会更难写
- 对格式有较强的要求(⼀个空格可能会引起⼀场⾎案)