从零开始的Spring Boot学习【五】【配置文件及yaml使用】

配置文件是干啥用的呢?

配置文件可以将默认的约定进行修改,例如端口号8080,我们就可以通过application.properties进行修改。

Spring Boot的默认全局配置文件有两个:

application.properties

application.yml

一个是以properties为后缀的文件;一个是以yml为后缀结尾的文件(YAML 是 "YAML Ain't a Markup Language" YAML 不是一种标记语言,YAML 的配置文件后缀为 .yml)。什么是标记语言?例如xml就是一种标记语言:

<server>
    <port>8080</port>
</server>

在Spring Boot中默认只给了application.properties文件,而没有给yml的配置文件。

我们在src/main/resources中创建一个file文件,取名为application.yml。

会自动变为相应的配置文件,我们现在来看看它的配置写法是怎么样的:

我们需要写上server:,然后回车,缩进再输入port:,然后空格,写上对应的值。

格式1:
[key1]:        //不是最后一个key的话,冒号后面是不需要空格的
    key[2]:    //记得要有缩进
        key[3]: [value]

如果学过python的话就很好理解,我们每一层的关系是非常严格的,不能放在同一级,而是需要缩进来体现出不同的层次关系

我们现在把application.properties中的配置信息都删除掉,只留下application.yml然后设置它的端口号为8181,运行一下。

在控制台Console我们能看到运行的端口号的确是8181,证明Spring Boot能够识别application.yml并且我们的写法也是没有问题的。

yml配置文件除了配置相关信息,还可以为属性赋值,我们先创建两个实体类来看看它到底怎么给属性赋值。

实体类1:

实体类2:

我们现在有两个实体类,一个学生,一个是宠物,而在学生类中又引用的pet实体类,也就是说学生拥有的宠物,然后我在学生类中设置了String,int,boolean,map,String[],list等不同的类型结构,来让大家进一步了解yml是如何给属性赋值的,我们对这些属性添加toString方法,方便运行时候能打印出相关的值,便于我们测试。

我们先看看前面四个,不论是int类型,String类型,我们都不需要添加引号,双引号去区分(可以加,但没有必要)。它会自动去识别并为我们添加到属性中去。

locaiton是map类型,我们需要添加一个{}来往里面添加key: value,是的没错,在里面的冒号后面也是需要添加一个空格,这就是yml的格式。

而不管是集合还是数组我们都可以采用如上图的方式,回车,缩进,加上“-”,然后空格,填写我们的value进行赋值

而对于另一个实体类中的属性,我们只需要回车,再次缩进就可以了,就像student:缩进后的那样。

好的,现在我们已经给属性赋予好了值,但是Student这个实体类要怎么认识到这些属性的值是给予它的呢?我们需要在Student类上写上一些注解,我们之前有介绍过的,大家应该能猜出来。

一个是@ConfigurationProperties,我们要设置它的前缀为student,这样就等于告诉Spring Boot这是一个配置文件,然后通过配置文件你可以修改我的属性值,就像修改编码格式一样的道理,忘记的童鞋可以翻翻我们之前所写的文章;然后我们要告诉Spring Boot这里有一个配置文件,所以我们需要将这个javabean放入Spring容器中,就需要用到@Component。可以看到在@ConfigurationProperties中会有一条黄线,我们鼠标移上去,会提示我们增加一个依赖到pom.xml文件中去,点击一下即可。

我们现在来测试一下,在src/test/java中有一个测试的类,我们打开它。

@Autowired:它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 

我们右键运行@Test中的方法,选择Run As,Junit Test。

因为我们之前重写了toString的方法,所以我们会有相关的属性值显示出来,从中我们可以看出,这些信息都是我们在yml配置文件中输入的值,证明了yml是可以赋予属性的值,也证明了我们的书写是没有问题的。

它还有另外一个书写方式,例如location这个map类型,我们也可以写成key: value的形式,数组和集合可以在[ ]中书写([ 是可以省略的]),pet这个实体类也可以用行内写法,我们叫这种方式为行内写法。

yml配置文件可以写,那么我application.properties难道就不行了吗?肯定可以啊,方式和我们讲的一样:

我们再次运行。

会发现它的age改为了24,从这次实验我们证明了application.properties的优先级要比application.yml的优先级要高,并且它们的配置可以互为补充

小拓展:

如果我们在yml中为值附上引号会有什么变化?我们来测试一下。我们在location中添加了双引号,单引号,不加引号,我们运行来看看它的效果。

只有加了双引号的才会解析转义字符,其他两个不会。

想要详细学习yaml的,提供链接:https://www.runoob.com/w3cnote/yaml-intro.html

关注博主,更多精彩哦!

上一章:从零开始的Spring Boot学习【四】【自动装配(三)】

下一章:从零开始的Spring Boot学习【六】【通过@Value方式注入】

发布了28 篇原创文章 · 获赞 29 · 访问量 8335

猜你喜欢

转载自blog.csdn.net/KnightHONG/article/details/104183420