Spring Boot中的配置文件有两种:properties格式和yml格式
一、propertise格式
- propertise格式是Springboot默认的配置文件的格式,它才有键值对key=value的方式存储配置信息,有系统key值和自定义key值两类。
- 系统key值就是Spring boot约定的一些key值,通过设置这些key对应的value值可以配置对应功能。比如:
servlet.port=8090
这条键值对就是设置servlet的端口号的。 - 自定义的key值就是可以自己设计一些key=value的键值对写在配置文件中,不用声明直接写就行。比如:
student.id=10
student.name=zhangsan
这两个就是我自定义的键值对,也可以写在配置文件中。
- 默认情况下的properties是不支持中文的,因为他的字符集不是utf8,所以在注释中写中文时,会出错。
需要再idea的设置里面,搜索encoding
将下方的两个设置项都改成utf8.
二、yaml格式
也可以简写成yml,全称是yet another mark language,另一种标记语言。
- 为什么有了propertise格式还要有yml格式?
propertise和yaml的关系就是新老版本之间的关系,propertise是java标准库规定的配置文件,而yaml是一个跨语言的,多平台可用的配置文件。
因为在实际工程中,通常一个项目不是由一个团队做的,而是多个团队共同开发,一个团队负责一个模块的开发,各个团队使用的语言配置文件格式都不一样,spring boot就是properties,最终一个项目可能有很多类型的配置文件,这对最终使用配置的运维团队是不友好的,所以就出现了yml配置文件。
yaml的跨语言特性,大大的减轻了项目的最终使用者的配置难度。
-
yaml的语法格式
yaml采用了一种类似于json的语法key: value.不同的是yaml的语法要求更加严格。-
key:后面必须加一个空格才能接着写value。key: value,不能是key:value。
-
yaml的层级次序是通过行头的tab个数多少形成的。比如在propertise中:
javaspring.datasource.username=root
在yaml中:
yamlspring: datasource: username: root
-
-
在yaml里面表示字符串
有三种方法,单引号,双引号和不加引号,都能表示字符串。
但是只有双引号括起来的字符串中如果有转义字符的话最终结果是转义后的字符,单引号和不加引号都是所见即所得,写啥就是啥。
三、获取配置文件中的属性和对象
-
@Value注解(获取配置文件中的属性)
在配置文件中写的键值对也是可以再项目代码中获取到的。-
@Value注解就是通过选择key值从而获取key值对应的value值的注解。
java@Value("${student.name}") private String name;
注意:必须要将配置项的key值放在${}中才能获取到对应的value值,如果不加 ${},如下:
java@Value("student.name") private String name;
下方的name属性就只会获取到被传的这个"student.name"这个字符串。
-
-
@ConfigurationPropertise(获取配置文件中的对象)
- 比如在配置文件中自定义了一个对象
propertise格式:
yaml格式:
都可以看做是一个对象,内部有一个name和age两个属性。可以从配置文件中直接获取到这个对象。
- 要定义一个此对象的接受类。
- 类属性名和对象属性名对应。
- 将这个类添加到Spring容器中,作为Bean。
- 使用@ConfigurationPropertise注解,指定配置文件中的对象名。
- 要实现这个类的getter和setter函数
- 获取到这个配置文件中的对象
使用@Autowired注入,和获取普通的Bean对象一样。
- 比如在配置文件中自定义了一个对象
四、Propertise VS yaml
- Propertise以key=value的形式配置文件,yaml以key:value的形式配置文件,层级之间使用换行缩进的方式配置,并且:后面必须加上空格才能写value。
- Propertise是早期的默认的配置文件,但是配置存在一些冗余配置,使用yaml可以解决冗余问题。
- yaml支持更多的语言,通用性更好。
- yaml支持更多的数据类型。
五、常用配置项
- 在实际的开发环境中,一般都会有多个配置文件,这是因为每个配置文件,对应一个生产环境,而每个环境的资源端口号配置都是有变换的,所以需要有多个配置文件,为了方便,在yml中将配置文件可以分为主次,主配置文件指定本次运行要使用哪个配置文件 spring.profiles.active这个属性配置使用哪个配置文件。
配置文件的名字都是由规范的,必须都是Application开头,主配置文件的名字就是Application,次配置文件的名字Application-xxx,只有xxx可以自定义。
配置属性的acitve的value值就是xxx
比如现在有这么多配置文件:
如果想让Application-dev做最终的配置文件,就必须要在默认的配置文件中设置spring.profiles.active=dev。
此时九江dev配置文件给配置完成了。
其他的配置项文档:Spring Boot配置项文档