本篇主要介绍Spring Boot配置文件的相关内容
目录
[二、Spring Boot中的配置文件](#二、Spring Boot中的配置文件)
一、什么是配置文件?
当我们去电脑城组装电脑时,工作人员会根据我们的预算和需求写一份配置表单,然后再根据配置表去组装一台电脑。配置文件就相当于这个配置表单,而新组装的电脑就相当于我们的程序,程序的基础设置都是依据的配置文件。
总的来说,配置文件就是用户和程序交互的媒介。
二、Spring Boot中的配置文件
在Spring Boot中,为我们提供了两种不同格式的配置文件:
- properties格式
- yaml格式(通常简写为yml格式)
下面,我们来详细了解一下这种两种不同格式的配置文件
properties文件
格式
properties是一种比较老的配置格式了,当我们在一创建个Spring Boot项目后,会默认自带一个properties格式的配置文件,
properties采用了键值对的格式,键值之间通过 = 号分割具体如下,配置与其子配置之间采用 . 号分离,具体如下:
properties除了支持第三方支持的配置项外还支持自定义配置,例如我们自定义一个User.name:
在配置文件中我们可以使用注释,注释符合为"#"
读取配置
配置文件中的配置信息是可以读取的,读取配置信息需要使用@Value注解,并在参数中的"${}"中写入自己需要获取的配置的名称,代码示例如下:
运行后,可以发现配置的值已经读取到了
properties缺点
使用properties格式的配置文件有一个比较明显的缺点,那就是写起来重复的内容太多,例如,我们来看看配置数据库连接所需要写的配置:
可以发现spring.datasource这段内容被重复了三次,实在太过于冗余了。下面我们再来看看yml格式的配置文件,它就很好的解决了这个问题。
yml文件
格式
yml配置文件采用换行加空格的方式来区分配置与子配置,并通过 :(注意 :后必须加空格,不然配置读取不到) 分割key和value,具体如下:
(由于spring boot并不自带yml格式的配置文件,所以需要我们自己来手动创建,并且前缀名设置为application)
还需要注意的是,配置与子配置之间必须换行,并且子配置必须与其上一级配置之间存在空格,如果没有空格,会被认为是同一级配置。
读取配置
事实上,yml文件和properties文件除了格式不一样的,效果是一样的,因此,yml文件和properties在很多地方的使用都是一样的,例如,从yml文件中读取配置信息的方式和从properties文件中读取不能说毫不相干,只能说一模一样。我们在yml中也定义一个User.name的配置信息,然后还是通过上面的代码去获取(要注意的是,spring boot 默认优先读取的是properties中配置信息,读完properties中的配置信息,才会去读yml中的,如果两者有一样的配置,以properties中的配置为主,因此,在这里已经事先把前面设置在properties中的user.name给删除了):
获取配置信息的代码还是和上次一样保持不变,
执行结果:
可以发现User.name被顺利读取到了。
事实上,yml文件也不是完全和properties文件一样,yml进行了一些扩展,yml文件支持更多数据类型。
配置基本数据类型
yml文件支持基本数据类型和null,具体如下:
我们通过代码来读取一下这些配置:
执行后:
可以发现,基本数据类型的配置信息已经读到了,配置的key名称我们可以自定义,不一定要在前面加类型名。
这里我们还需要注意一个问题,在设置String类型的value时,可以加引号,也可以不加,默认是不需加的。如果字符串里有特殊字符,如"/n",使用单引号或不加引号会将特殊符号转换为字符串,而使用双引号则不会,特殊字符还是会生效。
配置对象
在yml配置文件中我们可以配置对象,例如我们创建一个Student类:
配置一个student类对象
然后我们来获取一下配置的这个Student对象,获取配置的对象时,我们需要使用另外一个注解@ConfigurationProperties,并将其中的prefix参数设置为刚才配置的对象的key名,这个注解是加在我们自定义的Student类上的,并且还得在加上@Component类(加其他五大类注解也可以,但加这个更符合规范),这样spring就能扫描到这个类,并构建一个对象,然后再根据@ConfigurationProperties的prefix参数指定的key名称去配置文件找相关的配置内容,然后根据找到的配置内容来设置对象的属性值,最后再将对象存到spring中。因此我们要使用这个对象,就得通过依赖注入的方式。代码示例如下:
构建对象存入spring:
获取对象:
,控制台输出:
可以发现,配置的对象的信息已经成功被打印了。
需要注意的是在这里我们还是得确保设置的类中有无参构造方法和setter,因为spring会根据无参构造方法来构建对象并根据setter来设置属性的值。
配置集合
配置集合的方式和配置对象差不多,只不过要在对象中设置一个集合类型的属性,例如我们配置一个MyList类
在配置文件中配置集合
加注解:
读取配置的集合
控制台结果:
可以发现,配置的集合已经读取到了
配置Map
配置Map的过程其实和配置集合类似,只是在写配置时略有变化,具体如下:
然后读取的方式和读取前面集合是一样的,只不过要将属性类型改为map,并将涉及的对应关系,改为这里配置的就行了,这里就不再演示了
yml的优缺点
下面我们来总结一下yml格式的优缺点:
|----|-------------------------------------------------------------------|
| 优点 | 1.使用方便,冗余度低,可读性高 2.支持更多的数据类型,集合,对象等。 3.支持更多的编程语言,大部分语言都能使用 |
| 缺点 | 1.在子配置过多时,读起来非常困难,过多的空格和换行会使配置几乎没有可读性 2.格式要求严格,一个换行,一个空格都可能造成各种问题 |
官方推荐使用的格式是properties格式。原因可能是使用这种格式虽然冗余度高,但稳定不出错(个人猜测)
三、验证码案例
在我们开发验证码功能时,通常会引入第三方的工具来帮我们生成验证码的图片,和验证码的内容,Kaptcha就是一个这样的工具,使用Kaptcha非常简单,只需要引入它的依赖,并通过配置文件配置它的相关内容即可。
Kaptcha的依赖如下:
XML
<dependency>
<groupId>com.oopsguy.kaptcha</groupId>
<artifactId>kaptcha-spring-boot-starter</artifactId>
<version>1.0.0-beta-2</version>
</dependency>
然后我们再来配置使用Kaptcha的常见参数
在这里我们配置了一个长度为4字符颜色为蓝色的验证码图片,接下来我们通过配置的路径来看一下生成的这张验证码图片
可以发现
获得的图片和我们前面配置文件里设置的是一样,如果我们把验证码数字改为5,重新获取可以发现验证码的位数变成5了
由此,我们就能体会到配置文件的强大之处了 ,通过配置文件,我们可以根据自己的喜好或者需求来设置系统或者第三方组件的相关属性,而无需亲自去修改代码,想变成啥样,改下配置就行了。
最后如果还想了解Kaptcha的其他相关配置和更详细的使用,可以通过下面的链接去查询
https://github.com/oopsguy/kaptcha-spring-boot