写在前面

鉴于有人留言说想要学习SpringBoot相关的知识,我这里打算写一个SpringBoot系列的相关博文,目标呢是想让看了这一系列博文的同学呢,能够对SpringBoot略窥门径,这一系列的博文初步都定下来包括SpringBoot介绍、入门、配置、日志相关、web开发、数据访问、结合docker、缓存、消息队列、检索、任务安全、分布式等等一系列的博文,工作量很大,是个漫长的过程,每一步我都尽量详细,配上截图说明,也希望对看的同学真的有用。
单纯就是想分享技术博文,还想说一句就是,如果觉得有用,请点个关注、给个赞吧,也算对我来说是个宽慰,毕竟也得掉不少头发,嘿嘿嘿

系列文章传送条

详细SpringBoot教程之入门(一)
详细SpringBoot教程之入门(二)
详细SpringBoot教程之配置文件(一)
详细SpringBoot教程之配置文件(二)
详细SpringBoot教程之日志框架
详细SpringBoot教程之Web开发(一)
详细SpringBoot教程之Web开发(二)
详细SpringBoot教程之Web开发(三)
详细SpringBoot教程之数据访问
详细SpringBoot教程之启动配置原理
详细SpringBoot教程之缓存开发

配置文件

SpringBoot可以使用全局配置或者其他配置文件,并且我们在SpringBoot开发中会经常需要去配置某些模块的配置,这样有利于我们业务分离,理清逻辑关系。这个时候可能会说了,不是说SpringBoot的优点之一就是省去了繁琐的配置,为什么这里又要学配置呢?哈哈哈,省去了繁琐的配置是因为SpringBoot帮我们把所有配置弄好了默认,如果我们需要更改一些默认配置,当然需要我们自己手动更改呀。对于一些分布式大型项目,我们需要分各种端口,分各种环境,这些都需要我们修改。而且我们可能需要对可以重复利用的模块进行封装,然后在新项目中作为默认配置进新项目的时候,也需要知道如何进行SpringBoot的配置,所以还是很重要的。

说了这么多,我们开始来将SpringBoot的配置文件吧,在SpringBoot中配置文件有两种,一种是application.properties,另一种是application.yml,其中yml配置文件是在properties之后才有的。配置文件放在src/main/resources 目录或者类路径/config下,配置文件的作用,就是修改SpringBoot自动配置的默认值,SpringBoot底层都给我们自动配置好了很多默认值,我们就需要通过灵活的使用properties和yml来进行修改默认配置。

我们通过Idea向导帮我们创建的新项目,在Resources目录下面会帮我们自动生成一个properties配置文件,如下图

在resources目录下我们可以暂时手动再创建一个application.yml文件,为了比较学习他们的区别(说明一下的就是,二者可以同时存在,不过最终只会运行一个,一般默认运行application.properties,不过我们可以通过配置,在application.properties中同时应用yml,达到多个配置文件的目的),依旧在resources目录下,直接右键new->File,创建一个名为application.yml的文件,如下图

YAML 是 “YAML Ain’t a Markup Language”(YAML 不是一种标记语言)。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言)。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件,即以数据为中心,比json、xml等更加适合做配置文件,以前的项目大都是使用xml作为配置文件的。在全局配置文件中,可以对一些默认配置值进行修改,比如我们修改默认的端口号,我们如果使用xml作为配置文件,配置端口可能会是如下

<server><port>8090</port>
</server>

发现了没有,xml会浪费大量的内容给标签的开闭上,那如果我们在SpringBoot项目中使用properties和yml设置端口,又该如何呢,如下,左边是yml,右边是properties,两者看起来是不是都很简略

YAML语法

properties我们常见,我这里说一下YAML的一些基本语法,想要深入的可以直接到网上查,应该有很多详细的文档,我这里只是说一下基本语法,方便我们后面的讲解。

基本语法

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进不允许使用tab,只允许空格
  • 缩进的空格数不重要,只要相同层级的元素左对齐即可
  • '#'表示注释

数据类型

YAML 支持以下几种数据类型:

  • 对象:键值对的集合,又称为映射/ 哈希 / 字典
  • 数组:一组按次序排列的值,又称为序列 / 列表
  • 字面量:单个的、不可再分的值

字面量写法

字面量是最基本的,不可再分的值,包括:字符串、布尔值、整数、浮点数、时间、Null、日期。使用一个例子来快速了解字面量的基本使用:

boolean: - TRUE  #true,True都可以- FALSE  #false,False都可以
#例子:isEmpty: false
float:- 3.14- 6.8523015e+5  #可以使用科学计数法
#例子:value: 3.14
int:- 123- 0b1010_0111_0100_1010_1110    #二进制表示
#例子:value: 123
null:nodeName: 'node'parent: ~  #使用~表示null
#例子:value: ~
string:- 哈哈- 'Hello world'  #可以使用双引号或者单引号包裹特殊字符- newlinenewline2    #字符串可以拆成多行,每一行会被转化成一个空格
#例子:value: 哈哈
date:- 2018-02-17    #日期必须使用ISO 8601格式,即yyyy-MM-dd
#例子:value: 2018-02-17
datetime: -  2018-02-17T15:02:31+08:00    #时间使用ISO 8601格式,时间和#日期之间使用T连接,最后使用+代表时区

这里多说一些字符串,字符串默认不用加上单引号或者双引号。其中,双引号不会转移字符串里面的特殊字符,特殊字符会作为本身祥表示的意思,比如
name: “I am \n dbc” 输出 I am 换行 dbc
而单引号则会转义字符串里面的特殊字符,特殊字符最终只是一个普通的字符串数据,比如
name: “I am \n dbc” 输出 I am \n dbc

YAML 数组

以 - 开头的行表示构成一个数组:

num:- A- B- C

YAML 支持多维数组,可以使用行内表示:key: [value1, value2, …]

YAML 对象

对象键值对使用冒号结构表示 key: value,冒号后面要加一个空格。
也可以使用 key:{key1: value1, key2: value2, …}。还可以使用缩进表示层级关系,如下:

key: child-key: valuechild-key2: value2

较为复杂的对象格式,可以使用问号加一个空格代表一个复杂的 key,配合一个冒号加一个空格代表一个 value:

?  - complexkey1- complexkey2
:- complexvalue1- complexvalue2

意思即对象的属性是一个数组 [complexkey1,complexkey2],对应的值也是一个数组 [complexvalue1,complexvalue2]
YMAL基本语法先讲到这里,需要深入了解的自行查阅其他教程。

配置文件注入简单案例

这里我们在application.yml中写入一些数据,就是写一个类的属性值以及对应的数值,如下

为了方便,我也把内容粘贴出来

person:lastName: dbcage: 22boss: falsebirth: 2017/12/12maps: {k1: v2,k2: ;2}lists:- lisi- dbcdog:name: 小狗age: 12

写好了之后,我们创建一个Person类和一个Dog类,类中的属性值和配置文件中的属性值要一一对应,并在Person的类上加上@ConfigurationProperties注解,注解中的前缀填写我们在配置文件中的person,如下


因为我们需要将配置文件中配置的每一个属性值,映射到组件中,所以我们在Person类上添加一个@ConfigurationProperties,意思是告诉SpringBoot将本类中所有属性和配置文件中相关的配置进行绑定,prefix意思就是配置映射关系。这个时候发现编辑器提示如下

我这里直接把依赖粘贴出来,然后把这段依赖粘贴进pom.xml文件中,Idea会自动加载依赖,加载完依赖之后,原本红色的提示,变成 了绿色即可,如下

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional>
</dependency>


现在,完成了依赖的导入,也完成了配置文件的映射(即将配置文件和类进行了关联映射),映射之后,我们成这个映射为组件,不过现在我们只是完成了组件映射,我们还需要将这个组件注入到Spring容器中,因为只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能获取,所以我们还需要添加@Component,把类组件加到容器中,如图

测试案例

这样就完成了一个组件的注入,我们可以在容器中使用这个组件了,接下来我们进行单元测试了,细心的人会发现,我们使用Idea创建的SpringBoot项目中,在test目录下有一个java文件夹,被Idea标为绿色(如下),这个文件夹就是单元测试用的,当然我们手动创建的Maven项目,也可以手动配置,很简单,创建项目属性就可以了。接下来我们讲一下单元测试中的内容,如何使用

SpringBoot 的单元测试 ,可以在测试期间很方便的通过类似编码一样的方式,进行自动注入容器的功能,我们进入到那个DemoApplicationTests里面,其中有一个注解@SpringBootTest ,它标注是SpringBoot的单元测试。接着我们只需要在测试类中注入我们刚刚编写好的Person类,然后在方法中输出一下就可以了,毕竟我们只是检查一下我们编写的配置文件有没有成功配置好。执行之后在下方的日志中我们可以检查输出,测试类的内容和输出的日志结果如下图

使用properties完成案例

我们前面完成了使用yml类型的配置文件,进行映射注入,现在我们来试试使用properties类型的配置文件进行映射注入,其实不难,我们可以先将yml配置文件中的内容注释掉(当然不注释也可以,因为默认是读取properties)。我们开始编写properties里面的内容,会发现我们在properties中编写的时候,已经有person的提示了,是因为我们已经建类组件注入容器了,现在我们在里面编写内容如下

流程和yml中写的一样,获取配置文件值注入,导入处理器,注入写一个类,然后使用@ConfigurationProperties注解,注意了还得把类注入容器组件@Component
(在这里我们只要把内容写进properties就可以了,类、映射和注入在测试yml的时候已经写好了)。编写好之后运行测试,发现依旧能够读取到,结果如下

细心的人会发现,我们输出的结果出现了乱码,而出现乱码的原因是因为我们Idea默认的是utf-8编码,而properties用的是ASCII码,我们只要在Idea中将文件编码设置成Utf-8就可以了,如下

下一篇

写到这里篇幅有点长了,关于配置的剩下内容,我将在下一篇博文中进行讲解,可以先把上面学习的进行消化,加油,奥利给。

详细SpringBoot教程之配置文件(一)相关推荐

  1. 详细SpringBoot教程之入门(一)

    写在前面 鉴于有人留言说想要学习SpringBoot相关的知识,我这里打算写一个SpringBoot系列的相关博文,目标呢是想让看了这一系列博文的同学呢,能够对SpringBoot略窥门径,这一系列的 ...

  2. 详细SpringBoot教程之数据访问

    写在前面 鉴于有人留言说想要学习SpringBoot相关的知识,我这里打算写一个SpringBoot系列的相关博文,目标呢是想让看了这一系列博文的同学呢,能够对SpringBoot略窥门径,这一系列的 ...

  3. 详细SpringBoot教程之缓存开发

    写在前面 这一系列的博文初步都定下来包括SpringBoot介绍.入门.配置.日志相关.web开发.数据访问.结合docker.缓存.消息队列.检索.任务安全.分布式等等一系列的博文,工作量很大,是个 ...

  4. 详细SpringBoot教程之日志框架

    写在前面 鉴于有人留言说想要学习SpringBoot相关的知识,我这里打算写一个SpringBoot系列的相关博文,目标呢是想让看了这一系列博文的同学呢,能够对SpringBoot略窥门径,这一系列的 ...

  5. 通俗易懂的SpringBoot教程---day2---Springboot配置文件

    通俗易懂的SpringBoot教程-day2-Springboot配置文件 1.配置文件 SpringBoot使用一个全局的配置文件,配置文件名是固定的: •application.propertie ...

  6. 小姐姐的详细SpringBoot教程之入门 连接Mysql、Druid数据源和整合MyBatis(三)

    文章目录 1.整合JDBC使用 1.创建项目 2.打开项目 3.使用我们的Idea连接我们的mysql数据库 1. 5.最后,测试是否可以查询数据 6. 最后简单的实现增删改查 2.整合Druid数据 ...

  7. Jasper Report详细使用教程(保姆级教程),整合Springboot使用

    Jasper Report详细使用教程 1.下载Jaspersoft Studio 2.编写jrxml文件 3.编译模板文件 4.输出PDF报表(SpringBoot整合) 5.解决中文乱码(不显示的 ...

  8. 从零学ELK系列(十一):SpringBoot项目接入ELK超级版(超详细图文教程)

    前言 之前在<从零学ELK系列(十):SpringBoot项目接入ELK升级版(超详细图文教程)>中演示了SpringBoot项目接入ELK请求记录及优化,本次针对于未知异常通过拦截进行记 ...

  9. 非常详细的FastDFS整合springBoot教程-带文件下载地址

    FastDFS整合springBoot教程 编写该教程的目的 本教程基于已有的springBoot框架进行整合,springBoot构架部分不做教学 为了给自己做笔记,同时为所需童鞋少爬点坑. 目录 ...

最新文章

  1. 微信公众平台消息接口星标功能
  2. python 模拟浏览器selenium 微信_Spider-Python爬虫之使用Selenium模拟浏览器行为
  3. matlab、python使用小方法收集
  4. cacti 网络流量监测图形分析工具
  5. 第十五周项目1-打入“内部”寻“内幕”
  6. 读入源文件,并在每行前加上行号和[Tab]
  7. WPF中嵌套charts图表查询数据
  8. 访问母版页控件、属性、方法及母版页中调用内容页的方法
  9. Top1方案源码和数据,腾讯广告受众基础属性预估
  10. 【渝粤教育】国家开放大学2018年春季 7408-21T多媒体软件制作与使用 参考试题
  11. 如何对Windows 2000中出现的“Stop 0x0000007B”错误信息进行故障诊断
  12. Python3中使用flask_sqlalchemy的问题
  13. pytorch中的torch.nn.Unfold和torch.nn.Fold
  14. 道高一尺 魔高一丈(使用插件订火车票)
  15. python 0基础如何做出雷霆战机?【源码送上】
  16. 超级好看又易上手教你用python画樱花
  17. 前端可以做的SEO搜索引擎优化(摘取)
  18. 简单记录下手机root 过程
  19. 拯救者Y9000P 2022 ubuntu18.04问题总结
  20. 数仓岗位常见面试问题

热门文章

  1. 无需注册,不限次数!北大团队搞出ChatExcel
  2. php保留一位小数_PHP小数点后保留几位的简单示例
  3. .NET 将多个程序集合并成单一程序集的 4+3 种方法
  4. 服务器修改集成显卡显示,ubuntu 12.04 intel集成显卡设置分辨率的步骤分享
  5. PHP使用C语言扩展
  6. 伤害世界怎么自建服务器,伤害世界Hurtworld服务器架设教程
  7. Java Lambda 连接字符串
  8. Fedora 25 相关配置
  9. httpie实用指南
  10. Matlab将文件夹下的txt文件另存为mat文件