(一)、前面回顾
1.什么是Spring
https://fanlychie.github.io/post/thymeleaf.html
全局查找:ctrl+f 在本类中进行查找某个方法/属性
shift+shift 在整个idea中搜索某个类
Spring 是一个开源框架,2003年兴起的一个轻量级的java开发框架。
Spring是为了解决企业级应用开发的复杂性创建的 简化开发
2.Spring 是如何简化Java开发的
为了降低Java开发的复杂性,Spring 有如下四种关键策略
- 基于POJO的轻量级和最小性侵入性编程
- 通过IOC,依赖注入和面向接口实现松耦合
- 基于切面 (AOP) 和惯例进行声明式编程
- 通过切面和模板减少样式代码
(二)、什么是SpringBoot
1.基本含义:
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
2.Spring Boot的主要优点
- ⭐为所有Spring 开发者更快的入门
- ⭐开箱即用,提供各种默认配置来简化项目配置
- ⭐ 内嵌式容器简化Web项目
- ⭐没有冗余代码生成和XML配置的要求
(三)、微服务
1.什么是微服务
微服务是一种架构风格,他要求我们在开发一个应用的时候,这个应用必须构建一些列小服务的组合,可以通过http的方式进行互通,要说微服务架构,先得说说过去我们的单体应用架构。
2.单体应用架构
所谓单体应用架构是指: 我们将一个应用的中的所有应用服务都封装在一个应用中。
无论是ERP、CRM或则是其他什么系统,都把数据库访问,web访问,等等各个功能都封装在一个war包内
-⭐ 这样做的好处,易于开发和测试;也十分方便部署;
当需要拓展时,只需要将war复制多份,然后放到服务器上,再做个负载均衡就可以了。
-⭐ 单体用用架构的缺点是: 哪怕我要修改一个非常小的地方,我都需要停掉整个服务,重新打包,部署到整个应用的war包
,特别是对于一个大型应用,我们不可能把所有内容都放在一个应用里面,我们如何维护,如何分工都是问题。
3.微服务架构 (活字印刷)
all in one 的架构方式,我们把所有的功能单元放在一个应用里面。然后我们把整个应用部署到服务器上。如果负载能力不行,我们将整个应用进行水平复制,进行扩展,然后再负载均衡。
所谓微服务架构,就是打破之前 all in one 的架构方式,把每个功能元素独立出来。把每个功能元素独立出来。独立出来的功能元素的动态组合,需要的功能才去拿来组合,需要多一些时可以整合多个功能元素,所以微服务架构是对功能元素进行复制,而没有对整个应用进行复制。
这样做的好处:
- ⭐节省了调用资源
2 . ⭐ 每个功能元素都是一个可替换的、可独立升级的软件代码
程序核心:高内聚(在划分模块时,要把功能关系紧密的放到一个模块中)
低耦合(模块之间的联系越少越好,接口越简单越好)
论文地址:https://martinfowler.com/articles/microservices.html#CharacteristicsOfAMicroserviceArchitecture
4.如何构建微服务
一个大型系统的微服务架构,就像一个复杂交织的神经网络,每一个神经元就是一个功能元素,它们各自完成自己的功能,然后通过http相互请求调用。比如一个电商系统,查缓存、连接数据库、浏览页面、结账、支付宝等服务都是一个独立的功能服务,都被微化了作为一个微服务共同构建了一个庞大的系统。
如果修改其中的一个功能,只需要更新升级其中一个功能服务单元即可。
但是这种庞大的架构给部署和运维带来了很大的难度。于是,Spring为我们带来了构建大型分布式微服务的全套产品。
- 构建一个个功能独立的微服务应用单元,可以使用springboot,可以帮我们快速构建一个应用
- 大型分布式网络服务的调用,这部分springcloud来完成,实现分布式
- 在分布式中间,进行流式数据计算,批处理,我们有spring cloud data flow
- spring为我们想清楚了整个开始构建应用到大型分布式应用全流程方案
(四)、第一个SpringBoot程序
- 内嵌了Tomcat,我们不需要配置Tomcat
- 业务层等 我们需要放在与主入口类的同级目录下
1.点击新建文件
2.勾选web框架
我们这里的版本要用: 2.7.7 jdk用1.8 java版本用8
3.进行测试 测试成功
测试控制台
测试Tomcat
5.程序的主入口 (①)
这里是程序的主入口,不能删除
package com.example.springboot01hello; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; //本身就是一个SPring程序 // 程序的主入口 @SpringBootApplication public class SpringBoot01HelloApplication { public static void main(String[] args) { SpringApplication.run(SpringBoot01HelloApplication.class, args); System.out.println("你好 吉士先生"); } }
6.Pom的配置文件 (②)
- 继承了一个父项目
- 显示jdk版本信息
- web 依赖、单元测试
- 打包插件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <!-- 他有一个父项目 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.7</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>SpringBoot-01-hello</artifactId> <version>0.0.1-SNAPSHOT</version> <name>SpringBoot-01-hello</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <!-- web 依赖: tomcat dispatcherServlet xml... --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 单元测试 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <!-- 打包插件--> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
7.测试Controller(③)
必须在程序入口的同级目录下
package com.example.springboot01hello.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HellController { // 实现了自动装配 @RequestMapping("/hello") public String hello(){ // 调用业务,接受前端的参数 return "Hello world"; } }
8.测试打包
(五)、SpringBoot 彩蛋 (banner)
https://www.bootschool.net/ascii-art
// _ooOoo_ // // o8888888o // // 88" . "88 // // (| ^_^ |) // // O\ = /O // // ____/`---'\____ // // .' \\| |// `. // // / \\||| : |||// \ // // / _||||| -:- |||||- \ // // | | \\\ - /// | | // // | \_| ''\---/'' | | // // \ .-\__ `-` ___/-. / // // ___`. .' /--.--\ `. . ___ // // ."" '< `.___\_<|>_/___.' >'"". // // | | : `- \`.;`\ _ /`;.`/ - ` : | | // // \ \ `-. \_ __\ /__ _/ .-` / / // // ========`-.____`-.___\_____/___.-`____.-'======== // // `=---=' // // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // // 佛祖保佑 吉士先生 永不宕机 永无BUG //
1.在resource目录下创建一个banner.txt