一、SpringBoot2学习路线说明
说明:SpringBoot2分为核心技术和响应式编程2大类。
-
SpringBoot2核心技术:
基础篇:SpringBoot的快速掌握和基本原理。
核心功能篇:配置文件,web开发,Juint5单元测试…
场景整合:缓存技术,分布式入门… -
SpringBoot2响应式编程:SpringBoot以前的基础开发都可以使用另一套方案响应式编程来替代,所谓的响应式编程即:解决一个问题,如何使用少量的资源能编写一个极高的吞吐量,承担大并发的一个应用。
响应式编程:是未来的流行趋势,spring一直在大力推广。

1. SpringBoot2核心技术

2. SpringBoot2响应式编程

3. 学习前提
学习要求
● 熟悉Spring基础
● 熟悉Maven使用
环境要求
● Java8及以上
● Maven 3.3及以上
二、核心技术之- ->基础入门
1. Spring与SpringBoot
1.1 Spring能做什么
1.1.1 Spring的能力
- Microservice:
微服务开发,开发一个项目里面的模块众多,把所有的模块都写在同一个项目中,显然不合适。可以把项目的所有功能拆分为一个个的微小模块,每个模块称为微服务。 - Reactive:
响应式编程,基于异步非阻塞的方式,我们可以在每个应用之间构建异步流的方式来实现占用少量资源构建一个高吞吐量的应用。 - Cloud:
分布式云开发,把项目拆分为微小模块后就会产生分布式应用,SpingCloud就要相关的解决方案。 - Web Apps:
Web开发,使用SpringMvc开发一个Web应用,接收请求 响应一个json数据、一个页面等。 - Serverless:
无服务开发、函数即服务(FaaS:Function as a Service),简单快速的开发一个函数服务,我们无需购买服务器(这些服务器闲置的时候浪费资源),直接把函数服务上传到云平台,按量按时计费,这样可以减少很多人力、财力的浪费。 - Event Driven:
事件驱动,Spring将整个分布式系统构建成一个实时的数据流(streaming data),有了数据流之后就可以通过响应式的方式让整个系统占用少量的资源完成高吞吐量的业务。 - Batch:
批处理。

1.1.2 Spring的生态

- 覆盖了:
- web开发
- 数据访问
- 安全控制
- 分布式
- 消息服务
- 移动开发
- 批处理
- …
1.1.3 Spring和SpringBoot的关系

说明:
- Spring是一个轻量级的框架,可以整合Spring生态圈的一些列技术如:SpringMvc、SpringSecurity(安全控制) ,甚至是第三方的框架如Mybatis等。但是这些技术在整合的时候需要进行一系列的繁琐配置,太过麻烦。
- SpringBoot是对Spring的进一步封装,可以简化Spring开发的配置,提高开发效率。
- eg:我们现在掌握了造内存、cpu、硬盘等技术,但是现在就是想要一台电脑那么如何把这些东西组装到一起呢,可以直接到品牌方如联想买一台电脑。
- 总结:Spring全家桶的所有子项目框架基础都是Spring框架(Spring Framework) 。
1.1.4 Spring5重大升级
1) 响应式编程
说明:
- Servlet开发、SpringMvc开发,数据层Spring Data开发、Spring Sercurity安全开发等、SpringBoot引入了2套解决方案
-
- Servlet Stack:原生Servlet技术栈,通过Spring SpringMvc来实现。
-
- Reactive Stack:响应式开发技术栈。
-

2) 内部源码设计:
基于Java8的一些新特性,如:接口默认实现(不用重写所有的接口方法)。重新设计源码架构。
1.2. 为什么用SpringBoot
Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can “just run”.
能快速创建出生产级别的Spring应用
1.2.1 SpringBoot优点
- Create stand-alone Spring applications
○ 创建独立Spring应用 - Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files)
○内嵌web服务器 - Provide opinionated ‘starter’ dependencies to simplify your build configuration
○ 自动starter依赖,简化构建配置 - Automatically configure Spring and 3rd party libraries whenever possible
○ 自动配置Spring以及第三方功能 - Provide production-ready features such as metrics, health checks, and externalized configuration
○ 提供生产级别的监控、健康检查及外部化配置 - Absolutely no code generation and no requirement for XML configuration
○无代码生成、无需编写XML
SpringBoot是整合Spring技术栈的一站式框架
SpringBoot是简化Spring技术栈的快速开发脚手架
1.2.2 SpringBoot缺点
- 人称版本帝,迭代快,需要时刻关注变化
- 封装太深,内部原理复杂,不容易精通
1.3. 时代背景
1.3.1 微服务
James Lewis and Martin Fowler (2014) 提出微服务完整概念。https://martinfowler.com/microservices/
In short, the microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies.
-- James Lewis and Martin Fowler (2014)
- 微服务是一种
架构风格 - 一个应用拆分为一组小型服务
- 每个服务运行在自己的进程内,也就是可独立部署和升级
- 服务之间使用轻量级HTTP交互
- 服务围绕业务功能拆分
- 可以由全自动部署机制独立部署
- 去中心化,服务自治。服务可以使用不同的语言、不同的存储技术
1.3.2 分布式

1) 分布式的困难
说明:使用微服务把大型的软件拆分为一个个的微小服务,独立部署后会产生分布式的各种困难,比如部署到A服务器的模块Aa如何调用部署到B服务器的模块Bb呢,如何负载均衡呢?? 还有如下的一系列问题。
- 远程调用
- 服务发现
- 负载均衡
- 服务容错
- 配置管理
- 服务监控
- 链路追踪
- 日志管理
- 任务调度
- …
2) 分布式的解决
说明:
- 使用SpringBoot + SpringCloud进行开发。

1.3.3 云原生
说明:
- 开发好后,如何部署呢?
- 原生应用如何上云。 Cloud Native。
1) 上云的困难
- 服务自愈
- 弹性伸缩
- 服务隔离
- 自动化部署
- 灰度发布
- 流量治理
- …
2) 上云的解决

1.4. 如何学习SpringBoot
1.4.1 官网文档架构
Spring官网:https://spring.io/




查看版本新特性:
https://github.com/spring-projects/spring-boot/wiki#release-notes

2. SpringBoot2入门
说明:此版本基于SpringBoot2.3与2.4版本讲解。
2.1 系统要求
- Java 8 & 兼容java14
- Maven 3.3+
- idea 2019.1.2
2.1.1 maven设置
说明:配置阿里云镜像,设置Maven使用jdk1.8进行项目编译。
<mirrors>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
<profiles>
<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>
</profiles>
2.2 HelloWorld
需求:浏览发送/hello请求,响应 Hello,Spring Boot 2
2.2.1 创建maven工程

2.2.2 引入依赖
<!--想要使用springboot的功能,就必须引入springboot的父项目-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
</parent>
<dependencies>
<!--想要开发web,就要引入web场景-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
2.2.3 创建主程序(主启动类)

/**
* 主程序类:可以看成是一个主配置类,是所有启动的入口。(固定写法)
* @SpringBootApplication:这是一个SpringBoot应用
*/
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
SpringApplication.run(MainApplication.class,args);
}
}
2.2.4 编写业务

//@ResponseBody
//@Controller
@RestController
public class HelloController {
@RequestMapping("/hello")
public String handle01(){
return "Hello, Spring Boot 2!";
}
}
2.2.5 测试
说明:
- SpringMvc访问地址:ip:port/projectName/url,需要手动安装和配置Tomact服务器,url需要写上下文路径。
- SpringBoot访问地址:直接执行main函数来启动一个内置的Tomact服务器来处理请求,这时候访问默认是不需要添加项目名的,默认的context-path 是"/",加上项目名后会报404哦。


2.2.6 简化配置(properties配置文件)
说明:SpringBoot将之前Spring整合的一些列配置都抽取到了properties配置文件。
application.properties
server.port=8888 #修改服务器的端口号


2.2.7 简化部署(build插件 打jar包)
说明:
- 项目不发布只能本地访问,发布到Tomact服务器之后别人也可以访问。
- 之前:想要接收用户请求并响应给浏览器页面或数据,使用web资源所以创建的是web项目,打包方式为war包。把打成war包的项目部署到服务器,服务器需要安装tomact等一大堆配置。
- 现在:只需要引入这个springboot给我们提供的一个插件,就可以直接把这个项目打成一个
jar包,这个jar包自带了我们整套的运行环境,我们可以直接运行。 - 总结:以前运行web项目需要把项目打包成war包,在服务器上部署后需要配置一系列的运行环境。现在使用了springboot提供的一个插件,即便是把web项目打成jar包,也可以部署到服务器上运行。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
把项目打成jar包,直接在目标服务器执行即可。

打开target文件所在的目录,并进入到target目录,可以看到打包好的jar包。
当然也可以直接复制这个jar包到一个磁盘目录运行。



注意点:
- 取消掉cmd的快速编辑模式

3. 了解自动配置原理
3.1 SpringBoot特点
3.1.1 依赖管理-起步依赖(父版本号 场景启动器)
-
Springboot起步依赖原理:
-
场景:现在使用spring框架进行web程序开发,那么此时我们就需要引入web程序开发所需要的一些依赖,比如spring-webmvc、servlet、jackson等等,而且引入的依赖版本号要进行匹配,否则可能会出现版本冲突问题。

-
解决:使用Springboot进行web程序开发,只需要引入一个web开发的起步依赖即可,如果想要引入aop的相关依赖,只需要引入aop的起步依赖即可。

-
问题:引入web起步依赖后,为什么所有的web开发所需要的依赖就都有了???
-
原因:因为Maven的依赖传递。那么在spring boot给我们提供的这些起步依赖当中呢,就提供了当前程序开发中所需要的所有的常见依赖。eg:引入web开发的起步依赖,那么其它的依赖都会自动的通过Maven的依赖传递,传递进来。
-
-
父项目做依赖管理
<!--依赖管理:每一个SpringBoot工程都有一个父项目parent -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
</parent>
<!--parent的父项目:dependencies
几乎声明了所有开发中常用的依赖的版本号,自动版本仲裁机制-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.3.4.RELEASE</version>
</parent>
- 开发导入starter场景启动器/起步依赖
<!--
1、官方见到很多 spring-boot-starter-* : *就代表某种场景
2、只要引入starter,这个场景的所有常规需要的依赖我们都自动引入
3、SpringBoot所有支持的场景:官方文档的地址可以查看所有的SpringBoot所有支持的场景
https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-starter
4、见到的 *-spring-boot-starter: 第三方为我们提供的简化开发的场景启动器。
5、所有场景启动器最底层的依赖:starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.3.4.RELEASE</version>
<scope>compile</scope>
</dependency>
- 无需关注版本号,自动版本仲裁
1、引入依赖默认都可以不写版本
2、引入非版本仲裁的jar,要写版本号。
- 可以修改默认版本号
<!--
1、查看spring-boot-dependencies里面规定当前依赖的版本用的 key。
2、在当前项目里面重写配置 -->
<properties>
<mysql.version>5.1.43</mysql.version>
</properties>
3.1.2 自动配置(web依赖、主启动类包扫描)
-
什么是自动配置:
- SpringBoot的自动配置就是当spring容器启动后,一些配置类、bean对象就自动存入到了IOC容器中,不需要我们手动去声明,从而简化了开发,省去了繁琐的配置操作。
- eg:谷歌提供的转化json的对象Gson,我们想要使用的时候直接注入即可。
-
Springboot自动配置原理:查看3.3.4目录
-
自动配好Tomcat
○ 引入Tomcat依赖
○ 配置Tomcat
○ 说明:引入web依赖就会自动引入Tomcat依赖,并自动配置好,当主启动类运行时,会自动启动内嵌的tomdat服务器。


<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<version>2.3.4.RELEASE</version>
<scope>compile</scope>
</dependency>
- 自动配好SpringMVC
○ 引入SpringMVC全套组件
○ 自动配好SpringMVC常用组件(功能)
○ 说明:同样引入web依赖也会引入SpringMVC全套组件,并自动配置好。

本文概述了SpringBoot2的核心技术,包括Spring与SpringBoot的关系、微服务、分布式云开发、WebApps、Serverless与EventDriven等,并介绍了响应式编程的兴起及其在SpringBoot中的应用。学习路径涉及基础入门、自动配置原理和最佳实践,还提到了Lombok简化开发、dev-tools热部署和Spring Initializr快速项目搭建。
最低0.47元/天 解锁文章
621

被折叠的 条评论
为什么被折叠?



