一、什么是 SpringBoot?
Spring 是包含了众多工具的IoC容器,Spring Boot 是 Spring 的脚手架,是为了快速开发 Spring 而创建的一个框架。
二、Spring Boot 优点
- 快速集成框架,Spring Boot 提供了启动添加依赖的功能,用于秒级集成各种框架。
- 内置运行容器,无需配置 Tomcat 等 Web 容器,直接运行和部署程序。
- 快速部署项目,无需外部容器即可启动并运行项目。
- 可以完全抛弃繁琐的 XML,使用注解和配置的方式进行开发。
- 支持更多的监控的指标,可以更好的了解项目的运行情况。
三、SpringBoot 工程目录
PS: 在 SpringBoot 项目中将 Bean 注册到容器中不在需要进行配置了。但所有你需要存放到容器里的类,必须要放到 启动类的同级目录中,或者放到启动类的子目录中。 (约定大于配置)
四、SpringBoot 配置文件
对于整个项目来说,配置文件是非常重要的,它里面通常保存了一些重要的数据,例如:
- 数据库的连接信息(包含用户名和密码的设置);
- 项目的启动端口;
- 第三方系统的调用秘钥等信息;
- 用于发现和定位问题的普通日志和异常日志等。
1、配置文件的格式
SpringBoot 的配置文件主要有两种格式:
- 后缀名为
.properties
- 后缀名为
.yml
配置文件中的配置项分为两类:
- 系统配置项。:点击这里查看官方文档
- 自定义配置项。
概要说明:
.properties
类型的配置文件,是创建 Spring Boot 项目时默认的文件格式。- 理论上讲,properties 可以和 yml 一起存在于一个项目当中,当 properties 和 yml ⼀起存在⼀个项目中时,如果配置文件中出现了同样的配置,那么这个时候会以 properties 中的配置为主,也就是 .properties 配置文件的优先级最高,但加载完 .properties 文件之后,也会加载 .yml 文件的配置信息。
- 虽然 .properties 可以和 .yml 共存,但实际的业务当中,我们 通常会采取一种统一的配置文件格式,这样可以更好的维护(降低故障率)。
2、properties 配置文件
文件内容语法说明:properties 中的配置项是以键值的形式配置的,key
和 value
之间是以 “=
” 连接的。
例子:设置配置项
# 配置项⽬端⼝号 server.port=8081 # 配置 JDBC spring.datasource.url=jdbc:mysql://127.0.0.1:3306/dbname?characterEncoding=utf8 spring.datasource.username=root spring.datasource.password=root
例子:读取配置项
读取配置文件中的内容,可以使用 @Value
注解来实现。@Value 注解使用“${}
”的格式读取。
@Controller @ResponseBody public class Test { // 读取配置项 @Value("${server.port}") private String myConfig; }
虽然 properties 的配置文件结构比较清晰,但是当配置注入 JDBC 时会出现很多的冗余信息,比如上述重复出现的 spring.datasource
。想要解决这个问题,我们可以考虑使用 yml
格式的配置文件。
3、yml 配置文件
yml 全称 (Yet Another Markup Language)。yml 是树形结构的配置文件,它的 基础语法是“key: value
”,注意 key 和 value 之间使用 英文冒汗加空格
的方式组成的,其中的空格不可省略。
例子:设置配置项
spring: datasource: url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8 username: root password: 123456
和上面使用 properties 文件配置数据库连接进行对比可以发现,当前场景下,使用 yml 可以减少大量冗余信息。
例子:读取配置项
yml 中读取配置文件中的内容和 properties 相同,可以使用 @Value 注解来实现。@Value
注解使用“${}
”的格式读取。
@Controller @ResponseBody public class Test { // 读取配置项 @Value("${spring.datasource.url}") private String myConfig; }
除了以上基础的功能外,在 yml 中还可以 配置对象:
stu: name: 张三 password: 123456 id: 123
使用 @ConfigurationProperties 读取对象
@Controller @ConfigurationProperties("stu") @Data public class User { private String name; private String password; private int id; @Override public String toString() { return "User{" + "name='" + name + '\'' + ", password='" + password + '\'' + ", id=" + id + '}'; } }
4、多环境配置文件
一般代码的运行环境主要为以下三种:
- 本地开发环境
- 测试环境
- 生产环境
为了满足多个环境下的配置需求,可以创建多个用于不同环境的配置文件:
- application.properties:默认的配置文件,包含共享的属性。
- application-dev.properties:开发环境的配置文件
- application-test.properties:测试环境的配置文件
- application-prod.properties:生产环境的配置文件
我们可以通过在 application.properties 配置文件中指定运行环境的配置文件:
PS: 在 Spring 中,配置文件的命名约定是基于 application-{profile}.properties 或 application-{profile}.yml 的格式,其中 {profile} 是 spring.profiles.active
属性的值。
# 指定开发环境 spring.profiles.active=dev
5、properties 和 yml 区别
properties
是以key=value
的形式配置的键值类型的配置文件,而yml
使用的是类似json 格式的树形
配置方式进行配置的,yml 层级之间使用换行缩进的方式配置,key 和 value 之间使用“:
”英文冒号加空格的方式设置,并且空格不可省略。- properties 为早期并且
默认的配置文件格式
,但其配置存在⼀定的冗余数据,使用 yml 可以很好的解决数据冗余的问题。 - yml 通用性更好,支持更多语言,如 Java、Go、Python 等
- yml 支持更多的数据类型。如对象、集合等。