配置文件
首先,我们打开我们的上一篇博客中创建的项目的resource文件夹中可以看到,在我们的SpringBoot应用使用一个全局的配置文件,配置文件名是固定的:application.xxx。
配置文件的作用:修改SpringBoot自动配置的默认值;因为大多数的配置SpringBoot在底层都给我们自动配置好,所以我们只需要在配置文件中根据应用的实际需求更改配置即可。
例如:我们在默认的配置文件application.properties进行如下配置:
server.port=8081
server.servlet.context-path=/test
然后启动我的SpringBoot应用,在控制台中我们就会发现,我们启动的端口和访问路径都发生了改变:
启动浏览器,在浏览器中输入:http://localhost:8081/test/hello,即可正常访问我们的应用。
在这里我们需要重点说明的是,除了.properties格式的配置文件以外,SpringBoot还有一种.yml的配置文件格式,强烈推荐后者作为配置文件的格式。
在介绍yml之前呢,我们先介绍一个概念:标记语言。也称为标志语言、标识语言、markup language)是一种将文本(Text)以及文本相关的其他信息结合起来,展现出关于文档结构和数据处理细节的计算机文字编码。与文本相关的其他信息(包括例如文本的结构和表示信息等)与原来的文本结合在一起,但是使用标记(markup)进行标识。当今广泛使用的标记语言是超文本标志语言(HyperText Markup Language,HTML)和可扩展标志语言(eXtensible Markup Language,XML)
什么是.yml
.yml的全称是:YAML,是”YAML Ain’t a Markup Language”的递归缩写,意思是:YAML不是一种标记语言。在开发的这种语言时,YAML 的意思其实是:”Yet Another Markup Language”:YAML仍是一种标记语言,但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名 。
为什么推荐使用YAML作为配置文件
一句话:YAML以数据为中心,比json、xml等更适合做配置文件;
举个简单的例子:
YAML配置端口文件:
server:
port: 8081
XML配置端口文件:
<server>
<port>8081</port>
</server>
YAML的基本语法:
YAML使用可打印的Unicode字符,可使用UTF-8或UTF-16。
使用空格为文件缩进来表示结构,只要是左对齐的一列数据,都是同一个层级的;不过不能使用跳格字符(TAB)。
例如:
server: port: 8081 path: /hello
注解由井字号( # )开始,可以出现在一行中的任何位置,而且范围只有一行(也就是一般所谓的单行注解)
server: # 端口配置 port: 8081
每个清单成员以单行表示,并用短杠和空格( - )起始。或使用方括号( [ ] ),并用逗号和空白( , )分开成员。
pets: # 每个成员当行显示 ‐ cat ‐ dog ‐ pig
pets: [cat,dog,pig] # 行内写法
每个散列表的成员用冒号和空格( : )分开键值和内容。或使用大括号( { } ),并用逗号和空格( , )分开。
- 散列表的键值可以用问号 ( ? )起始,用来明确的表示多个词汇组成的键值
friends: # 每个属性单行显示 lastName: zhangsan age: 20
friends: {lastName: zhangsan,age: 18} # 行内写法
字符串平常并不使用引号,但必要的时候可以用双引号( “ )或单引号( ‘ )框住。
- 使用双引号表示字符串时,可用倒斜线( \ )开始的转义字符表示特殊字符。
例如:name: “zhangsan \n lisi” 输出为: zhangsan 换行 lisi
区块的字符串用缩进和修饰符(非必要)来和其他数据分隔,有新行保留(preserve)(使用符号 | )或新行折叠(flod)(使用符号 > )两种方式。
data: > Wrapped text will be folded into a single paragraph Blank lines denote # 空白行代表段落之间的间距 paragraph breaks
在单一文件中,可用连续三个连字号(—)区分多个文件。
- 另外,还有选择性的连续三个点号( … )用来表示文件结尾。
--- # 电影清单 - Casablanca - North by Northwest - Notorious
重复的内容可使从参考标记星号 ( * )复制到锚点标记( & )。
# 文件中重复的部分用这个方法处理:使用锚点(&)和引用(*)标签将"aa"散列表的内容复制到"bb"散列表 aa: &id001 city: East Centerville state: KS bb: *id001
指定格式可以使用两个惊叹号( !! ),后面接上值。
a: 123 # 整数 b: "123" # 字符串 c: 123.0 # 浮点数 d: !!float 123 # 浮点数,使用!!表示为严格形态 e: !!str 123 # 字符串,使用严格形态 f: !!str Yes # 字符串,使用严格形态
配置文件注入示例
项目结构图:
创建一个宠物类:Dog.java
package com.example.springboot02.controller.bean; /** * @Author: REN * @Description: * @Date: Created in 0:31 2018/8/22 */ public class Dog { private String name; private Integer age; @Override public String toString() { return "Dog{" + "name='" + name + '\'' + ", age=" + age + '}'; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
创建主人类:Person.java
package com.example.springboot02.controller.bean; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import java.util.Date; import java.util.List; import java.util.Map; /** * @Author: REN * @Description: * @Date: Created in 0:25 2018/8/22 */ @Component @ConfigurationProperties(prefix = "person") public class Person { private String name; private Integer age; private Date birth; private List<Object> list; private Map<String,Object> maps; private Dog dog; @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + ", birth=" + birth + ", list=" + list + ", maps=" + maps + ", dog=" + dog + '}'; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Date getBirth() { return birth; } public void setBirth(Date birth) { this.birth = birth; } public List<Object> getList() { return list; } public void setList(List<Object> list) { this.list = list; } public Map<String, Object> getMaps() { return maps; } public void setMaps(Map<String, Object> maps) { this.maps = maps; } public Dog getDog() { return dog; } public void setDog(Dog dog) { this.dog = dog; } }
在pom.xml中导入如下依赖:
<!--导入配置文件处理器,配置文件进行绑定就会有提示--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
在配置文件application.yml中进行如下编写:
server: port: 8081 person: name: ren age: 18 birth: 2018/08/22 maps: {k1: v1,k2: v2} list: - hi - hello dog: name: rack age: 2
创建PersonController类:
package com.example.springboot02.controller; import com.example.springboot02.controller.bean.Person; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * @Author: REN * @Description: * @Date: Created in 0:19 2018/8/22 */ @RestController public class PersonController { @Autowired Person person; @RequestMapping("/person") public Person person() { return person; } }
直接运行主函数,在浏览器输入:http://localhost:8081/person 即可看到内容已经成功的进行了注入:
总结
这一节,我们简单介绍了有关Spring Boot的配置文件信息。着重介绍了有关YAML文件的有关语法,以及如何通过配置文件将属性注入到javaBean中,这一节主要掌握如何通过YAML文件对Spring Boot项目属性配置即可。
源码下载
特别说明:
参考文献:
尚硅谷,SpringBoot核心技术篇
转载说明: 支持转载,但请保留原作者,原文链接,微信公众号二维码

扫码关注作者个人技术公众号,不定期将有学习资源分享