SpringBoot配置文件——yml讲解

    科技2022-07-16  105

    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注解

    浏览器运行结果为:

     

    Processed: 0.009, SQL: 8