SpringBoot遵循约定大雨配置,因此,其配置文件也是需要学习的一个重要内容
1、配置文件
SpringBoot 使用一个全局的配置文件,配置文件名是固定的:Application.properties、Application.yml
2、作用
配置文件的作用:修改springboot自动配置的默认值;springboot在底层都为我们自动配置好了。
3、具体内容
3.1 YML
YAML Aint Markup Language:YAML不是一种标记语言。通常以.yml为后缀的文件
标记语言:以前的配置文件多数都是xxx.xml文件;
Yml:是以数据为中心的,比json、xml等更适合作配置文件
3.2 YML的优点
- YAML易于人们阅读。
- YAML数据在编程语言之间是可移植的。
- YAML匹配敏捷语言的本机数据结构。
- YAML具有一致的模型来支持通用工具。
- YAML支持单程处理。
- YAML具有表现力和可扩展性。
- YAML易于实现和使用。
4、实践
我们在项目的resources包里创建一个文件,命名为application.yml,我们会发现里面的写法和properties不太一样
如果用xml写的话,则为:
<server>
<port>8888</port>
</server>
运行之后,发现端口号变为8888:
5、YML语法
k: v 表示键值对关系,冒号后面必须有一个空格;
使用空格的缩进表示层级关系,空格数目不重要,只要是左对齐的一列数据,都是同一个层级的;
大小写敏感;
缩进时不允许使用Tab键,只允许使用空格。
值的写法
5.1 字面量:普通的值(数字、字符串、布尔)
k: v:字面量直接写;字符串默认不用加上单引号或者双引号;
"": 双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
name: "zhangsan \n lisi":输出;zhangsan 换行 lisi
'':单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据
5.2 对象(属性和值)、Map(键值对)
在下一行来写对象的属性和值的关系,注意缩进
行内写法:
5.3 数组、list、set
用- 值表示数组中的一个元素
行内写法:
我们来写一个例子:
创建一个Person类
同时在yml中写出属性值:
完成后,我们在Person类中配置这个yml数据,因此我们需要:@ConfigurationProperties注解,用以告诉springboot将本类中的所有属性和配置文件中相关的配置进行绑定;
参数prefix = "person",即将配置文件中某个标签下面的所有属性进行一一映射
因为只有这个组件是容器中的组件,才能使用容器提供的功能,所以我们还需要@Component注解
可以编写一个测试类,
运行结果:
我们也可以在properties中写属性值,但是运行后显示乱码:
我们在file的setting里面搜索file ecodings,选择编码UTF-8
点击apply和OK后,发现properties文件中的属性变为乱码:
修改为中文,再进行运行:
当然,我们也能用@Value注解配置,但是需要手动一个一个指定
运行结果:
6、总结
由此我们整理一下@Value获取值和@ConfigurationProperties获取值比较
松散绑定是指在用@Value注解时,person.last-name不能是person.lastName
而JSR303数据校验则是指,在配置数据时,我们可以用@Validated注解,这样我们试图在lastName之前使用 @Email注解,表示这个值应该是邮箱格式。
配置文件无论是yml还是properties他们都能获取到值;
如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;(源自复杂类型封装)
例如,我们有时候想单独取一个值,就可以充分利用@Value注解
浏览器运行结果为: