SpringBoot、SpringCloud学习教程

SpringBoot、SpringCloud学习历程

一、SpringBoot

1.架构的演变

SpringBoot、SpringCloud学习教程_第1张图片

  • 单一应用架构
    当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。
  • 垂直应用架构
    当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,提升效率的方法之一是将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。
  • 分布式服务架构
    当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。
  • 流动计算架构
    当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键。

2.Spring“统治一切”SpringBoot、SpringCloud学习教程_第2张图片

3.第一个SpringBoot程序

springboot核心功能官方文档
SpringBoot、SpringCloud学习教程_第3张图片

前言:如果非科班,idea的安装,大家自行百度~

3.1 打开idea,点击新建项目

SpringBoot、SpringCloud学习教程_第4张图片

3.2Spring InitializrSpringBoot、SpringCloud学习教程_第5张图片

3.3自定义依赖项

SpringBoot、SpringCloud学习教程_第6张图片

3.4等待构建完成

可选:删掉框中的文件,使得项目更加清爽~
SpringBoot、SpringCloud学习教程_第7张图片

3.5最终

SpringBoot、SpringCloud学习教程_第8张图片

3.6启动应用

SpringBoot、SpringCloud学习教程_第9张图片

3.7启动成功

SpringBoot、SpringCloud学习教程_第10张图片

3.8访问http://localhost:8080

SpringBoot、SpringCloud学习教程_第11张图片

3.9构建MVC架构目录SpringBoot、SpringCloud学习教程_第12张图片

注意:构建的controller、service、dao、pojo等包一定要跟xxxApplication在同级目录下。因为xxxApplication的扫描器默认扫描xxxApplication所在目录及下层目录。

3.10创建一个HelloController

SpringBoot、SpringCloud学习教程_第13张图片

3.11保存->重启->访问

SpringBoot、SpringCloud学习教程_第14张图片

3.12打jar包

SpringBoot、SpringCloud学习教程_第15张图片

3.13启动打的jar包

SpringBoot、SpringCloud学习教程_第16张图片
停止当前应用(防止端口冲突),鼠标在demo-0.0.1-SNAPSHOT.jar处右键单击选择->打开于->终端。
然后在终端输入java -jar demo-0.0.1-SNAPSHOT.jar
SpringBoot、SpringCloud学习教程_第17张图片
SpringBoot、SpringCloud学习教程_第18张图片
再次访问:http://localhost:8080/test/hello
SpringBoot、SpringCloud学习教程_第19张图片
提示:在终端按住ctrl+c即可停止java -jar 包(服务)的运行。

3.14更改项目端口号

SpringBoot、SpringCloud学习教程_第20张图片

3.15重启->访问http://localhost:8081/test/hello

SpringBoot、SpringCloud学习教程_第21张图片

3.16更换Spring Banner

推荐网站:Spring Banner在线生成
SpringBoot、SpringCloud学习教程_第22张图片
在resource下创建banner.txt,然后将从网站上复制下来的,粘贴到文件中,保存后重启即可。
SpringBoot、SpringCloud学习教程_第23张图片

3.17成功更换

SpringBoot、SpringCloud学习教程_第24张图片

3.18SpringBoot自动装配原理

自动配置:
pom.xml

  • spring-boot-dependencies:核心依赖在父工程中
  • 引入spring-boot依赖的时候,无需指定版本号,因为spring-boot-dependencies中存在版本仓库
    SpringBoot、SpringCloud学习教程_第25张图片
    SpringBoot、SpringCloud学习教程_第26张图片
    pom.xml–>spring-boot-starter-parent—>spring-boot-dependencies
  • including:Version Control & Core Dependencies $ Core plugins

SpringBoot、SpringCloud学习教程_第27张图片
SpringBoot、SpringCloud学习教程_第28张图片
SpringBoot、SpringCloud学习教程_第29张图片
SpringBoot、SpringCloud学习教程_第30张图片

启动器

  • 启动器:通俗的说就是Springboot的启动场景

  • eg:spring-boot-starter-web,它会帮我们自动导入web环境所有的依赖

  • springboot会将所有的功能场景,封装成一个个的启动器

  • 需要使用什么功能,只需引入对应的启动器"starter"官网starters url
    SpringBoot、SpringCloud学习教程_第31张图片

  • 主程序

/** 标注这个类是一个springboot的应用 */
@SpringBootApplication
public class DemoApplication 
  public static void main(String[] args) {
    SpringApplication.run(DemoApplication.class, args);
  }
}
  • 注解
@SpringBootConfiguration:soringboot的配置
    @Configuration:spring配置类
    @Component:说明这也是一个spring的组件
@EnableAutoConfiguration:自动配置
    @AutoConfigurationpackage:自动配置包
        @Import(AutoConfigurationPackages.Registrar.class):自动配置"包注册"
    @Import(AutoConfigurationImportSelector.class):自动配置导入选择
    //获取所有的配置
    List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes);
 protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
		List<String> configurations = new ArrayList<>(
				SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader()));
		ImportCandidates.load(AutoConfiguration.class, getBeanClassLoader()).forEach(configurations::add);
		Assert.notEmpty(configurations,
				"No auto configuration classes found in META-INF/spring.factories nor in META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports. If you "
						+ "are using a custom packaging, make sure that file is correct.");
		return configurations;
	}

META-INF/spring.factories:自动配置的核心文件
结论:springboot所有的自动配置都是在启动的时候扫描并加载:META-INF/spring.factories ,所有的自动配置类都在这个文件里面,但是不一定生效,只有导入对应的启动器,自动装配才会生效。
1.springboot在启动的时候,从类路径下/META-INF/spring.factories获取指定的值;
2.将这些自动配置的类导入容器,自动配置就会生效;
3.整合JAVA EE的解决方案和自动配置类都在spring-boot-autoconfigure-2.7.3.jar这个包下。
SpringApplication.run(DemoApplication.class, args);
SpringBoot、SpringCloud学习教程_第32张图片
SpringBoot、SpringCloud学习教程_第33张图片

SpringBoot、SpringCloud学习教程_第34张图片
SpringApplication.run(DemoApplication.class, args);
1.判断应用的类型是普通项目还是Web项目
2.查找并加载所有可用的初始化器,设置到initializers属性中
3.找出所有的应用程序监听器,设置到listeners属性中
4.推断并设置main方法的定义类,找到运行的主类
SpringBoot、SpringCloud学习教程_第35张图片

面试点:关于SpringBoot,谈谈你的理解:

  • 自动装配
  • run();
  • springboot是spring的一个升级,对开发者来说,熟悉springboot有助于快速开发java.
  • springboot提个重要的概念就是自动配置,使得开发者无需像之前spring项目那样做大量的配置,有了springboot,比如我们要集成redis,在使用maven构建项目的情况下,我们只需要引入redis的依赖,然后在application.yml配置文件里配置必要的参数即可,如果要覆盖默认配置,同样在配置文件直接写就可以完成覆盖,也就是说使用springboot既可以享受快速开发,也可以轻松的覆盖默认配置。
  • sprincloud就是在springboot的基础上开发的。

4.SpringBoot自定义配置文件

springBoot使用一个全局的配置文件,配置文件名称是固定的。

  • application.properties
    语法结构:key=value
  • application.yml
    语法结构:
    1.key:  value
    2.#对象
    student:
    name: cxj
    age: 18
    3.#对象行内写法
    student: {name: cxj,age: 18}
    4.#数组
    pets:
    - cat
    - dog
    - pig
    #数组,行内写法
    pets: [cat,dog,pig]
    5.yaml可以直接给实体类赋值
    通过@ConfigurationProperties(prefix = “类名”)可以将yaml中的对象值直接赋给对应的类。
    SpringBoot、SpringCloud学习教程_第36张图片

二、SpringCloud

1.认识微服务

      微服务这种方案需要技术框架来落地,全球的互联网公司都在积极尝试自己的微服务落地技术。国内最知名的就是SpringCloud和Dubbo.
微服务拆分的目的就是单一职责。
面试题:面向对象的五大基本原则

  • 单一职责原则(SRP)任何一个软件模块都应该只对某一类行为负责。
    -开放封闭原则(OCP)面向扩展开放,面向修改关闭。
  • 里氏替换原则(LSP) 超类存在的地方,子类是可以替换的。
  • 依赖倒置原则(DIP) 实现尽量依赖抽象,不依赖具体实现。
  • 接口隔离原则(ISP)应当为客户端提供尽可能小的单独的接口,而不是提供大的总的接口。

      微服务技术对比图
SpringBoot、SpringCloud学习教程_第37张图片
2.SpringCloud
SpringBoot、SpringCloud学习教程_第38张图片
3.springcloud和springBoot的兼容关系
该文章基于Hoxton.SR10,对应的SpringBoot版本是2.3.x版本。
SpringBoot、SpringCloud学习教程_第39张图片
4.服务拆分及远程调用
服务拆分注意事项
1.不同的微服务,不要重复开发相同的业务
2.微服务数据独立,不要访问其他微服务的数据库
3.微服务可以将自己的业务暴露为接口,供其他微服务调用
SpringBoot、SpringCloud学习教程_第40张图片
5.微服务远程调用
SpringBoot、SpringCloud学习教程_第41张图片

你可能感兴趣的:(笔记,spring,boot,spring,cloud,学习)