一、SpringBoot 简介
1 定义
SpringBoot 是简化 Spring 开发的框架,整合整套 Spring 技术栈,是 JavaEE 一站式开发解决方案,俗称开发脚手架。
2 优势
- 快速创建独立可运行 Spring 项目,无缝集成主流框架
- 内嵌 Tomcat 等 Servlet 容器,无需打包 war
- Starter 场景启动器,自动管理依赖与版本
- 大量自动装配,极少配置,开箱即用,无 XML 冗余配置
- 内置运行监控,适配云原生开发
3 微服务概念
- 发展历程:Servlet → SSH → SSM → 单体架构 → SOA → SpringCloud 微服务
- 微服务定义:将大型应用拆分为多个小型独立业务服务,服务间通过 HTTP 通信,松耦合、可单独部署升级。
- 单体架构:所有业务代码整合为一个项目,ALL IN ONE。
4 微服务优缺点
优点
- 单一服务职责单一,聚焦业务
- 小团队独立开发维护,迭代高效
- 服务解耦,开发、部署互不干扰
- 支持多语言异构开发
- 灵活自动化部署、弹性扩容
- 可适配低配服务器,易对接第三方系统
- 服务可独立数据库存储
缺点
- 运维操作量大幅增加
- 分布式架构复杂度高,排查问题困难
- 服务数量越多,集群管理成本越高
二、开发环境准备
1 环境版本约束
- JDK:1.8 及以上
- Maven:3.3.x 及以上
- 开发工具:IDEA、STS
- SpringBoot:2.0.x 适配 Spring5
2 Maven 全局 JDK 配置
修改settings.xml,固定编译版本
XML
<profile>
<id>jdk‐1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
三、第一个 SpringBoot HelloWorld
1 实现步骤
- 创建普通 Maven Jar 工程
- 引入 SpringBoot 父工程与 web 启动器依赖
XML
<!-- 父工程统一版本管理 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<dependencies>
<!-- web场景启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐web</artifactId>
</dependency>
</dependencies>
- 编写启动主类
java
@SpringBootApplication
public class HelloWorldMainApplication {
public static void main(String[] args) {
SpringApplication.run(HelloWorldMainApplication.class,args);
}
}
- 编写请求控制器
java
@Controller
public class HelloController {
@ResponseBody
@RequestMapping("/hello")
public String hello(){
return "Hello World!";
}
}
- 运行主类,浏览器访问
localhost:8080/hello测试 - 打包插件,支持 jar 包一键部署
XML
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐maven‐plugin</artifactId>
</plugin>
</plugins>
</build>
打包后执行命令运行:java -jar xxx.jar
2 Hello 项目原理剖析
-
父工程
spring-boot-starter-parent继承版本仲裁父类,统一管控所有依赖版本,常规依赖无需手动指定版本。 -
场景启动器 Starter 按需引入对应 starter,自动导入该场景全部依赖包,web、数据库、缓存均对应专属启动器。
-
主启动注解 @SpringBootApplication 组合核心注解:
@SpringBootConfiguration:标识当前为配置类@EnableAutoConfiguration:开启自动装配@ComponentScan:自动扫描当前包及子包下所有组件
自动装配流程 启动时加载META-INF/spring.factories文件,读取所有自动配置类,自动创建组件、完成参数装配,替代手动 XML 配置。
四、Spring Initializer 快速创建项目
IDEA 内置 Spring 初始化向导,联网快速生成工程:
- 自动生成启动主类
- resources 目录结构
- static:存放 js、css、图片静态资源
- templates:模板页面目录,默认不支持 JSP
- application.properties:全局核心配置文件
五、SpringBoot 配置文件
1 热部署配置
修改代码无需重启项目,提升开发效率 引入依赖:
XML
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
修改后快捷键Ctrl+F9触发热更新。
2 配置文件格式
固定文件名二选一:
application.properties:传统键值配置application.yml:缩进式轻量化配置,以数据为中心
3 YAML 基础语法
- 键值格式:
k: 空格 v,空格不可省略 - 空格缩进控制层级,同级左对齐
- 大小写敏感
- 字符串默认无需引号,双引号转义特殊字符,单引号原样输出
- 对象、数组均依靠缩进层级标识
4 配置文件属性注入
- 导入配置提示依赖
XML
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐configuration‐processor</artifactId>
<optional>true</optional>
</dependency>
- 两种取值方式
@Value:零散获取单个配置值@ConfigurationProperties:JavaBean 批量绑定配置
- 配置数据校验 搭配
@Validated、数据格式注解校验配置合法性
5 专属注解使用
@PropertySource:加载自定义外部配置文件@ImportResource:兼容导入老式 Spring XML 配置@Configuration + @Bean:注解式向容器注册组件,SpringBoot 推荐用法
6 配置占位符
- 随机数:
${random.int}、${random.uuid} - 默认值写法:
${key:默认值}
7 Profile 多环境切换
- 多环境配置文件命名:
application-dev.yml、application-prod.yml - yml 多文档块区分环境
- 激活方式:配置文件指定、命令行参数、虚拟机参数
8 配置文件加载优先级
优先级从高到低,高优先级覆盖低优先级,多文件互补生效
- 项目根目录 config 文件夹
- 项目根目录
- 类路径 config 文件夹
- 类路径根目录
9 外部配置加载顺序
命令行参数 > 系统环境 > 项目外配置 > 项目内配置 > 默认配置
六、SpringBoot 自动配置原理
1 执行流程
- 主类
@EnableAutoConfiguration开启自动装配 - 扫描项目所有 jar 中
spring.factories - 加载全部 xxxAutoConfiguration 自动配置类
- 依据条件注解判断配置类是否生效
- 生效后自动创建组件,绑定配置文件参数
2 条件注解 @Conditional 系列
满足条件才创建组件、生效配置
@ConditionalOnClass:存在指定类才生效@ConditionalOnMissingBean:容器无对应 Bean 才创建@ConditionalOnWebApplication:Web 环境生效
3 查看自动配置报告
配置debug=true,控制台打印自动配置匹配日志,区分生效 / 未生效配置类。
4 自动配置
- 项目启动批量加载内置自动配置类
- 按需匹配场景配置,自动装配常用组件
- 组件属性绑定配置文件,自定义修改默认参数
- 无需手动创建 Bean、编写 XML 配置