SpringBoot——如何获取配置文件中的配置信息
简单介绍:
之前我们看到了我们是如何对SpringBoot以及SpringBoot中不同技术进行配置的,我们舍弃了之前在Spring中的对不同的技术使用不同的配置信息的方式,使用将所有技术的配置写在了一个配置文件中,那么我们要如何获取这些配置信息呢?也就是这些对应的技术是如何获取配置信息中的值的呢?
简单演示:
首先我们要自己写一段配置,这个配置纯碎是我们自己写的,并不会被任何的技术读取:
然后我们将要写一个程序,读取最后这部分我们自己写的配置信息:
其实这并不是一个新鲜的操作,在之前我们学习Spring的时候,还记得之前我们为了解决数据层的硬编码问题 ,我们就曾经将与数据库连接有关的信息放在了一个配置文件中,然后在MybatisConfig的dataSource类中进行应用,那么当时我们是如何做的呢?
第一步:使用@PropertySource注解将我们需要读取配置的配置文件引入到类中来。
第二步:使用@Value进行注入,只不过注入的值是从配置文件中读取的,所以格式需要使用${配置文件中的属性名}的方式进行读取。
完整的写法是这样的:
看一下运行结果:
这就是一个最基础的读取配置文件的方法,也是之前我们在做的时候的一种普遍做法,那么SpringBoot内部也是这么做的吗?很遗憾并不是的,这么一条一条的写,那得写到什么时候,SpringBoot使用了另一种方法,他将所有的相关的属性配置成了一个对象,注意,是在配置文件中就组成了一个对象,然后在需要用到的地方,只读取这一组需要用到的配置信息对象,这样不就又快又安全,那么要如何将配置信息组成对象,又如何只读取这一个配置对象呢?
我们需要介绍一个新的配置文件类型,叫做yml配置文件:
YAML配置文件:
简单介绍:
yaml或称yml配置文件,全称Aint Markup Language,一种数据序列化语言。它的优点就是方便阅读,容易与脚本进行交互,以数据为核心,重数据轻形式。这种文件的扩展名是yml或者是yaml,一般yml用的多。
我们将之前写的properties形式的配置文件修改成yml格式的配置文件就知道这种文件的优势是什么了:
可以看到,这种配置文件和之前的配置文件的格式还是有很多的变化的,比如这种文件格式没有等号,多层参数使用缩进而不是点连接,其实还有很多的要求,我们整体的总结一下:
1、大小写敏感,spring和Spring会被认为是两个单词
2、属性层级关系使用多层描述,每行结尾使用冒号结束
3、使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab)
4、属性值前面添加空格(属性值与属性名之间使用冒号+空格作为分隔)
5、#号表示注解
6、描述数组的时候,使用减号区分多个元素,每个元素列一行
这些其实都是比较正式的规则,具体要如何的写以及要如何的使用我们在后续的学习中都会给大家介绍到的。
那么继续之前我们说的,我们要在配置文件中配置一组由配置信息组成的对象,那么什么叫对象呢?
所谓的对象其实就是除了最后一层属性名之外的其他属性名其实都算是对象,我们都可以注入进一个配置文件中,那么我们就来看看如何进行注入:
在观察学习的时候可以结合之前获取properties配置文件的步骤和方式进行对照记忆。
1、首先要创建一个封装数据的类:
对于用来封装配置数据的类,我们首先要定义属性与配置信息中的属性互相对应:
其次,因为我们自动装载配置信息这个动作是由SpringBoot帮我们完成的,所以我们要将封装配置信息的类也注册进Spring容器中,所以要在类中加入一个@Component注解。
其次,将信息输入到属性中的这个动作是通过类中的Get和Set方法去完成的,所以我们需要将属性对应的方法添加上去,这里可以使用重新方法的方式,也可以使用Lombok的快速开发的方式,使用@Data注解的方式快速添加方法上去。
最后还有一个注解,这个注解的作用是将我们要注入的配置文件中的对象的名字填入进去,这样她才能知道他注入的是那一组数据,这也很符合他查找数据的方式,所以这个地方在配置文件中写的对象的名字是不能重复的:
这样我们一个比较完整的配置文件封装类就做完了,那么如何使用它呢?
这里我们打开测试类,这个测试类的位置就在test文件夹下他给我们提供的一个类就可以,他连方法都帮我们写好了,我们就做一个简单的测试,我们创建这个类,然后在项目启动的时候,Spring会帮我们自动检测这个类做了配置项的注入,然后会帮我们自动把配置文件中的信息注入到配置类中,然后我们使用自动注入的方式将配置类获取到,然后直接输出内容即可,这就是我们在测试中做的事情。
也就是说我们所有的配置注入的方式都已经在启动项目的时候就已经做好了,我们可以很方便的使用:
在运行程序之后,可以看到我们的对象中的值跟我们在配置文件中写入的值是一样的,那么就说明我们的Java类读取配置文件中的部分信息就已经完成了了,这种方法是我们在以后的项目中使用最多的配置信息。
并且这种方法也是让SpringBoot中的多个技术使用同一个配置文件的方法,在我们加载多项技术的时候,让不同的技术加载各自需要的配置就可以了,如果我们不做配置,SpringBoot也有对应的默认的配置让我们可以开箱即用,也是非常方便的。
并且如果配置文件中没有对应类中的属性的时候,类中的属性会自动填充空值null:
然后我们看运行结果:
可以看到,在对应的属性中,他会自动填充null。
如果是配置文件中多出了配置属性,在Java类中不存在,那么这个配置信息不会被自动填充:
我们来看运行结果:
Java类只会接收类中的属性值有的属性,对于多余的属性他会默认无视掉。