目录
一,配置文件的作用
配置文件(Configuration File)在软件开发、系统部署和运维中扮演着至关重要的角色。它们的主要作用是存储和管理软件应用或系统运行的参数、设置和选项,以便这些参数可以根据不同的环境、用户偏好或需求进行调整,而无需修改程序代码本身。
配置文件通常以文本文件的形式存在,如INI、XML、YAML、JSON等格式,它们易于阅读和编辑。许多现代编程语言和框架都提供了读取和解析配置文件的库或工具,使得配置文件的使用更加方便和高效。下面我们来聊一聊在SpringBoot中,有几种配置文件以及如何使用这些配置文件。
二,SpringBoot配置文件
SpringBoot 中有三种配置文件类型:application.properties,application.yml,application.yaml文件。其中 application.yml 和 application.yaml 的使用格式是一样的,所以这里只讲application.properties,application.yml。
注:application.properties,application.yml 这里的前缀application不能写错,写错了Spring就识别不了了!!!
2.1 .properties基本语法
properties是以键值对的形式配置的,key 和 value 之间使用 = 连接,如:
//端口号配置
server.port=8080
//数据库配置
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/java_blog_spring?characterEncoding=utf8&useSSL=true
spring.datasource.username=****
spring.datasource.password=******
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
获取配置文件内容
我们不仅可以获取官方提供的配置,也可以获取自定义的配置,这里拿自定义的配置举例:
//自定义一个key=value
test.key1=101
test.key2=hello world
如果@Value("")中不加${},那么就会直接把值赋给key1,如下:
2.2 .yml基本语法
yml是以键值对的形式配置的,key 和 value 之间使用: 连接,如:
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/java_blog_spring?characterEncoding=utf8&useSSL=true
username: ***
password: ******
driver-class-name: com.mysql.cj.jdbc.Driver
上述配置与.properties配置的内容是相同的,可以发现.yml配置文件更加简便。学过python的可以发现,.yml的语法与python很类似,都是使用行对齐来表示它们之间的逻辑关系。注意(: 后面的空格是不能省略的)
举个例子:
获取配置文件内容
我们不仅可以获取官方提供的配置,也可以获取自定义的配置,这里拿自定义的配置举例:
//自定义
test:
key1: 13
key2: hello
获取和上面的.properties配置文件是一样的:
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: ''
#注:如果要定义一个字符串为null的话,不能使用~,它会识别成字符~
#那么我们如何定义一个为null的字符串呢?答案是不用定义,既然它是null,那么为什么要定义!!!
加单双引号的区别
定义一个字符串有三种写法,一种是直接写,一种是加单引号,一种是加双引号,下面举个例子:
string:
str1: hello \n world
str2: 'hello \n world'
str3: "hello \n world"
@RequestMapping("demo")
@RestController
public class demo3 {
@Value("${string.str1}")
String str1;
@Value("${string.str2}")
String str2;
@Value("${string.str3}")
String str3;
@RequestMapping("/getStr")
String getStr(){
System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
return "...";
}
}
可以发现:
- 字符串默认不用加上单引号或者双引号
- 单引号会转义特殊字符,使其失去转义功能,将转义字符变成一个普通字符
- 双引号不会转义特殊字符,该转义还是转义
配置对象
student:
id: 1
name: zhangsan
age: 18
@Data
@Component
@ConfigurationProperties(prefix = "student")//从配置文件中获取对象
public class Student {
private int id;
private String name;
private int age;
}
@RequestMapping("demo")
@RestController
public class demo3 {
@Autowired
private Student student;
@RequestMapping("/getStudent")
String getStudent(){
return student.toString();
}
}
配置集合
list:
arr:
- 12
- 3
- 13
@Data
@Component
@ConfigurationProperties(prefix = "list")
public class ListConfig {
List<Integer> arr;
}
@RequestMapping("demo")
@RestController
public class demo3 {
@Autowired
private ListConfig listConfig;
@RequestMapping("/getList")
String getList(){
return listConfig.toString();
}
}
配置Map
mymap:
map:
k1: v1
k2: v2
k3: v3
@Data
@Component
@ConfigurationProperties(prefix = "mymap")
public class MapConfig {
Map<String, String> map;
}
@RequestMapping("demo")
@RestController
public class demo3 {
@Autowired
private MapConfig mapConfig;
@RequestMapping("/getMap")
String getMap(){
return mapConfig.toString();
}
}
2.3 properties 与 yml 的区别
- properties使用点号(.)和(=)来表示键值对,如key=value;yml使用缩进和(: )来表示层次结构
- properties主要支持字符串类型;yml支持多种数据类型,包括字符串、数字、布尔值、数组、对象等,可以直接在配置文件中表示复杂的数据结构,无需在读取时进行额外的转换。
- 都支持多种编程语言, 不只是Java中可以使用, 在Golang, Python, Ruby, JavaScript中也可以使用
注:理论上讲 .properties 和 .yml 可以并存在于⼀个项⽬中,当 .properties 和 .yml 并存时,两个配置都会加载. 如果配置⽂件内容有冲突, 则以 .properties 为主, 也就是.properties 优先级更⾼.