第一章:SpringBoot
基础入门
1.1:Spring
与SpinrBoot
-
Spring
能做什么-
Spring
的能力
-
Spring
的生态网址:
https://spring.io/projects/spring-boot
覆盖了:
Web
开发、数据访问、安全控制、分布式、消息服务、移动开发、批处理等。 -
Spring5
重大升级-
响应式编程
-
内部源码设计
基于
Java8
的一些新特性。
-
-
-
为什么用
SpringBoot
Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can "just run"。
能快速创建出生产级别的Spring
应用。-
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
技术栈的快速开发脚手架。 -
SpringBoot
的缺点- 迭代快,需要时刻关注变化。
- 封装太深,内部原理复杂,不容易精通。
-
-
时代背景
-
微服务
James Lewis and Martin Fowler (2014)
提出微服务完整概念。https://martinfowler.com/microservices/
微服务是一种架构风格。一个应用拆分为一组小型服务。每个服务运行在自己的进程内,也就是可独立部署和升级。服务之间使用轻量级
HTTP
交互。服务围绕业务功能拆,可以由全自动部署机制独立部署,去中心化,服务自治。服务可以使用不同的语言、不同的存储技术。 -
分布式
-
分布式的困难
远程调用、服务发现、负载均衡、服务容错、配置管理、服务监控、链路追踪、日志管理、任务调度。
-
分布式的解决
SpringBoot + SpringCloud
-
-
-
如何学习
SpringBoot
-
官网文档架构
查看版本新特性:
https://github.com/spring-projects/spring-boot/wiki#release-notes
-
1.2:SpringBoot2
入门
需求:浏览器发送/hello
请求,响应Hello, Spring Boot 2
。
-
创建
maven
工程在
IDEA
创建一个新的工程boot_helloworld_01
。 -
引入依赖
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.4.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
-
创建主程序
package com.wang; // 主程序类。@SpringBootApplication:这是一个SpringBoot应用 @SpringBootApplication public class MainApplication { public static void main(String[] args) { SpringApplication.run(MainApplication.class, args); } }
-
编写业务
package com.wang.controller; @RestController public class HelloController { @RequestMapping("/hello") public String handle01() { return "Hello, Spring Boot 2!"; } }
-
测试
直接运行
mian
方法,浏览器访问http://localhost:8080/hello
-
修改配置
在
resources
文件夹下创建application.properties
文件server.port=8888
修改了上面配置,重新启动项目,
http://localhost:8080/hello
访问成功。 -
简化部署
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
重新打成一个
jar
包在cmd
窗口下也能运行。
1.3:了解自动配置原理
-
SpringBoot
特点-
依赖管理
-
父项目做依赖管理
几乎声明了所有开发中常用的依赖的版本号,自动版本仲裁机制。
<!-- 依赖管理,自己工程引入的依赖 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.4.RELEASE</version> </parent> <!-- 它的父项目 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.3.4.RELEASE</version> </parent>
-
开发导入
starter
场景启动器-
见到很多
spring-boot-starter-*
:*
就是某种场景。 -
只要引入
starter
,这个场景的所有常规需要的依赖我们都自动引入。 -
SpringBoot
所有支持的场景:https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using.build-systems.starters
-
见到
*-spring-boot-starter
:第三方为我们提供的简化开发的场景启动器。 -
所有场景启动器最底层的依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.3.4.RELEASE</version> <scope>compile</scope> </dependency>
-
-
无需关注版本号,自动版本仲裁
- 引入依赖默认都可以不写版本。
- 引入非版本仲裁的
jar
,要写版本号。
-
可以修改默认版本
查看
spring-boot-dependencies
里面规定当前依赖的版本用的key
。<!-- 举例:修改mysql的版本依赖 --> <properties> <mysql.version>5.1.43</mysql.version> </properties>
-
-
自动配置
-
自动配好
Tomcat
-
引入
Tomcat
-
-
-